@kalisio/kdk 2.5.2 → 2.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (275) hide show
  1. package/core/client/components/input/KShapePicker.vue +4 -4
  2. package/coverage/core/api/application.js.html +344 -344
  3. package/coverage/core/api/authentication.js.html +79 -79
  4. package/coverage/core/api/db.js.html +167 -167
  5. package/coverage/core/api/hooks/hooks.authentication.js.html +12 -12
  6. package/coverage/core/api/hooks/hooks.authorisations.js.html +166 -163
  7. package/coverage/core/api/hooks/hooks.groups.js.html +1 -1
  8. package/coverage/core/api/hooks/hooks.logger.js.html +18 -18
  9. package/coverage/core/api/hooks/hooks.model.js.html +280 -268
  10. package/coverage/core/api/hooks/hooks.organisations.js.html +1 -1
  11. package/coverage/core/api/hooks/hooks.push.js.html +12 -12
  12. package/coverage/core/api/hooks/hooks.query.js.html +92 -92
  13. package/coverage/core/api/hooks/hooks.schemas.js.html +13 -13
  14. package/coverage/core/api/hooks/hooks.service.js.html +28 -28
  15. package/coverage/core/api/hooks/hooks.storage.js.html +7 -7
  16. package/coverage/core/api/hooks/hooks.users.js.html +48 -48
  17. package/coverage/core/api/hooks/index.html +49 -49
  18. package/coverage/core/api/hooks/index.js.html +11 -11
  19. package/coverage/core/api/index.html +42 -42
  20. package/coverage/core/api/index.js.html +22 -22
  21. package/coverage/core/api/marshall.js.html +127 -127
  22. package/coverage/core/api/models/groups.model.mongodb.js.html +1 -1
  23. package/coverage/core/api/models/index.html +1 -1
  24. package/coverage/core/api/models/messages.model.mongodb.js.html +1 -1
  25. package/coverage/core/api/models/organisations.model.mongodb.js.html +1 -1
  26. package/coverage/core/api/models/tags.model.mongodb.js.html +1 -1
  27. package/coverage/core/api/models/users.model.mongodb.js.html +11 -11
  28. package/coverage/core/api/services/account/account.hooks.js.html +42 -42
  29. package/coverage/core/api/services/account/account.service.js.html +34 -34
  30. package/coverage/core/api/services/account/index.html +1 -1
  31. package/coverage/core/api/services/authorisations/authorisations.hooks.js.html +34 -34
  32. package/coverage/core/api/services/authorisations/authorisations.service.js.html +108 -120
  33. package/coverage/core/api/services/authorisations/index.html +19 -19
  34. package/coverage/core/api/services/databases/databases.hooks.js.html +1 -1
  35. package/coverage/core/api/services/databases/databases.service.js.html +1 -1
  36. package/coverage/core/api/services/databases/index.html +1 -1
  37. package/coverage/core/api/services/groups/groups.hooks.js.html +1 -1
  38. package/coverage/core/api/services/groups/index.html +1 -1
  39. package/coverage/core/api/services/import-export/import-export.hooks.js.html +1 -1
  40. package/coverage/core/api/services/import-export/import-export.service.js.html +1 -1
  41. package/coverage/core/api/services/import-export/index.html +1 -1
  42. package/coverage/core/api/services/index.html +15 -15
  43. package/coverage/core/api/services/index.js.html +97 -85
  44. package/coverage/core/api/services/mailer/index.html +1 -1
  45. package/coverage/core/api/services/mailer/mailer.hooks.js.html +1 -1
  46. package/coverage/core/api/services/mailer/mailer.service.js.html +1 -1
  47. package/coverage/core/api/services/messages/index.html +5 -5
  48. package/coverage/core/api/services/messages/messages.hooks.js.html +11 -8
  49. package/coverage/core/api/services/organisations/index.html +1 -1
  50. package/coverage/core/api/services/organisations/organisations.hooks.js.html +1 -1
  51. package/coverage/core/api/services/organisations/organisations.service.js.html +1 -1
  52. package/coverage/core/api/services/push/index.html +1 -1
  53. package/coverage/core/api/services/push/push.hooks.js.html +1 -1
  54. package/coverage/core/api/services/push/push.service.js.html +1 -1
  55. package/coverage/core/api/services/storage/index.html +1 -1
  56. package/coverage/core/api/services/storage/storage.hooks.js.html +36 -36
  57. package/coverage/core/api/services/storage/storage.service.js.html +30 -30
  58. package/coverage/core/api/services/tags/index.html +1 -1
  59. package/coverage/core/api/services/tags/tags.hooks.js.html +1 -1
  60. package/coverage/core/api/services/users/index.html +7 -7
  61. package/coverage/core/api/services/users/users.hooks.js.html +83 -80
  62. package/coverage/core/api/services/users/users.service.js.html +4 -4
  63. package/coverage/core/api/utils.js.html +1 -1
  64. package/coverage/core/common/errors.js.html +2 -2
  65. package/coverage/core/common/index.html +30 -30
  66. package/coverage/core/common/index.js.html +11 -11
  67. package/coverage/core/common/permissions.js.html +187 -187
  68. package/coverage/core/common/schema.js.html +26 -26
  69. package/coverage/core/common/utils.js.html +61 -61
  70. package/coverage/core/common/utils.offline.js.html +6 -6
  71. package/coverage/index.html +179 -164
  72. package/coverage/lcov-report/core/api/application.js.html +344 -344
  73. package/coverage/lcov-report/core/api/authentication.js.html +79 -79
  74. package/coverage/lcov-report/core/api/db.js.html +167 -167
  75. package/coverage/lcov-report/core/api/hooks/hooks.authentication.js.html +12 -12
  76. package/coverage/lcov-report/core/api/hooks/hooks.authorisations.js.html +166 -163
  77. package/coverage/lcov-report/core/api/hooks/hooks.groups.js.html +1 -1
  78. package/coverage/lcov-report/core/api/hooks/hooks.logger.js.html +18 -18
  79. package/coverage/lcov-report/core/api/hooks/hooks.model.js.html +280 -268
  80. package/coverage/lcov-report/core/api/hooks/hooks.organisations.js.html +1 -1
  81. package/coverage/lcov-report/core/api/hooks/hooks.push.js.html +12 -12
  82. package/coverage/lcov-report/core/api/hooks/hooks.query.js.html +92 -92
  83. package/coverage/lcov-report/core/api/hooks/hooks.schemas.js.html +13 -13
  84. package/coverage/lcov-report/core/api/hooks/hooks.service.js.html +28 -28
  85. package/coverage/lcov-report/core/api/hooks/hooks.storage.js.html +7 -7
  86. package/coverage/lcov-report/core/api/hooks/hooks.users.js.html +48 -48
  87. package/coverage/lcov-report/core/api/hooks/index.html +49 -49
  88. package/coverage/lcov-report/core/api/hooks/index.js.html +11 -11
  89. package/coverage/lcov-report/core/api/index.html +42 -42
  90. package/coverage/lcov-report/core/api/index.js.html +22 -22
  91. package/coverage/lcov-report/core/api/marshall.js.html +127 -127
  92. package/coverage/lcov-report/core/api/models/groups.model.mongodb.js.html +1 -1
  93. package/coverage/lcov-report/core/api/models/index.html +1 -1
  94. package/coverage/lcov-report/core/api/models/messages.model.mongodb.js.html +1 -1
  95. package/coverage/lcov-report/core/api/models/organisations.model.mongodb.js.html +1 -1
  96. package/coverage/lcov-report/core/api/models/tags.model.mongodb.js.html +1 -1
  97. package/coverage/lcov-report/core/api/models/users.model.mongodb.js.html +11 -11
  98. package/coverage/lcov-report/core/api/services/account/account.hooks.js.html +42 -42
  99. package/coverage/lcov-report/core/api/services/account/account.service.js.html +34 -34
  100. package/coverage/lcov-report/core/api/services/account/index.html +1 -1
  101. package/coverage/lcov-report/core/api/services/authorisations/authorisations.hooks.js.html +34 -34
  102. package/coverage/lcov-report/core/api/services/authorisations/authorisations.service.js.html +108 -120
  103. package/coverage/lcov-report/core/api/services/authorisations/index.html +19 -19
  104. package/coverage/lcov-report/core/api/services/databases/databases.hooks.js.html +1 -1
  105. package/coverage/lcov-report/core/api/services/databases/databases.service.js.html +1 -1
  106. package/coverage/lcov-report/core/api/services/databases/index.html +1 -1
  107. package/coverage/lcov-report/core/api/services/groups/groups.hooks.js.html +1 -1
  108. package/coverage/lcov-report/core/api/services/groups/index.html +1 -1
  109. package/coverage/lcov-report/core/api/services/import-export/import-export.hooks.js.html +1 -1
  110. package/coverage/lcov-report/core/api/services/import-export/import-export.service.js.html +1 -1
  111. package/coverage/lcov-report/core/api/services/import-export/index.html +1 -1
  112. package/coverage/lcov-report/core/api/services/index.html +15 -15
  113. package/coverage/lcov-report/core/api/services/index.js.html +97 -85
  114. package/coverage/lcov-report/core/api/services/mailer/index.html +1 -1
  115. package/coverage/lcov-report/core/api/services/mailer/mailer.hooks.js.html +1 -1
  116. package/coverage/lcov-report/core/api/services/mailer/mailer.service.js.html +1 -1
  117. package/coverage/lcov-report/core/api/services/messages/index.html +5 -5
  118. package/coverage/lcov-report/core/api/services/messages/messages.hooks.js.html +11 -8
  119. package/coverage/lcov-report/core/api/services/organisations/index.html +1 -1
  120. package/coverage/lcov-report/core/api/services/organisations/organisations.hooks.js.html +1 -1
  121. package/coverage/lcov-report/core/api/services/organisations/organisations.service.js.html +1 -1
  122. package/coverage/lcov-report/core/api/services/push/index.html +1 -1
  123. package/coverage/lcov-report/core/api/services/push/push.hooks.js.html +1 -1
  124. package/coverage/lcov-report/core/api/services/push/push.service.js.html +1 -1
  125. package/coverage/lcov-report/core/api/services/storage/index.html +1 -1
  126. package/coverage/lcov-report/core/api/services/storage/storage.hooks.js.html +36 -36
  127. package/coverage/lcov-report/core/api/services/storage/storage.service.js.html +30 -30
  128. package/coverage/lcov-report/core/api/services/tags/index.html +1 -1
  129. package/coverage/lcov-report/core/api/services/tags/tags.hooks.js.html +1 -1
  130. package/coverage/lcov-report/core/api/services/users/index.html +7 -7
  131. package/coverage/lcov-report/core/api/services/users/users.hooks.js.html +83 -80
  132. package/coverage/lcov-report/core/api/services/users/users.service.js.html +4 -4
  133. package/coverage/lcov-report/core/api/utils.js.html +1 -1
  134. package/coverage/lcov-report/core/common/errors.js.html +2 -2
  135. package/coverage/lcov-report/core/common/index.html +30 -30
  136. package/coverage/lcov-report/core/common/index.js.html +11 -11
  137. package/coverage/lcov-report/core/common/permissions.js.html +187 -187
  138. package/coverage/lcov-report/core/common/schema.js.html +26 -26
  139. package/coverage/lcov-report/core/common/utils.js.html +61 -61
  140. package/coverage/lcov-report/core/common/utils.offline.js.html +6 -6
  141. package/coverage/lcov-report/index.html +179 -164
  142. package/coverage/lcov-report/map/api/hooks/hooks.catalog.js.html +348 -258
  143. package/coverage/lcov-report/map/api/hooks/hooks.features.js.html +218 -218
  144. package/coverage/lcov-report/map/api/hooks/hooks.query.js.html +795 -810
  145. package/coverage/lcov-report/map/api/hooks/index.html +54 -54
  146. package/coverage/lcov-report/map/api/hooks/index.js.html +16 -16
  147. package/coverage/lcov-report/map/api/index.html +32 -32
  148. package/coverage/lcov-report/map/api/index.js.html +46 -46
  149. package/coverage/lcov-report/map/api/marshall.js.html +72 -72
  150. package/coverage/lcov-report/map/api/models/alerts.model.mongodb.js.html +24 -24
  151. package/coverage/lcov-report/map/api/models/catalog.model.mongodb.js.html +69 -27
  152. package/coverage/lcov-report/map/api/models/features.model.mongodb.js.html +80 -80
  153. package/coverage/lcov-report/map/api/models/index.html +69 -54
  154. package/coverage/lcov-report/map/api/models/projects.model.mongodb.js.html +26 -26
  155. package/coverage/lcov-report/map/api/models/styles.model.mongodb.js.html +112 -0
  156. package/coverage/lcov-report/map/api/services/alerts/alerts.hooks.js.html +136 -136
  157. package/coverage/lcov-report/map/api/services/alerts/alerts.service.js.html +343 -343
  158. package/coverage/lcov-report/map/api/services/alerts/index.html +32 -32
  159. package/coverage/lcov-report/map/api/services/catalog/catalog.hooks.js.html +177 -162
  160. package/coverage/lcov-report/map/api/services/catalog/index.html +21 -21
  161. package/coverage/lcov-report/map/api/services/daptiles/daptiles.service.js.html +1 -1
  162. package/coverage/lcov-report/map/api/services/daptiles/index.html +1 -1
  163. package/coverage/lcov-report/map/api/services/features/features.hooks.js.html +160 -160
  164. package/coverage/lcov-report/map/api/services/features/features.service.js.html +117 -117
  165. package/coverage/lcov-report/map/api/services/features/index.html +31 -31
  166. package/coverage/lcov-report/map/api/services/index.html +21 -21
  167. package/coverage/lcov-report/map/api/services/index.js.html +404 -296
  168. package/coverage/lcov-report/map/api/services/projects/index.html +21 -21
  169. package/coverage/lcov-report/map/api/services/projects/projects.hooks.js.html +237 -237
  170. package/coverage/lcov-report/map/api/services/styles/index.html +116 -0
  171. package/coverage/lcov-report/map/api/services/styles/styles.hooks.js.html +196 -0
  172. package/coverage/lcov-report/map/common/dynamic-grid-source.js.html +68 -68
  173. package/coverage/lcov-report/map/common/errors.js.html +16 -16
  174. package/coverage/lcov-report/map/common/geotiff-grid-source.js.html +267 -267
  175. package/coverage/lcov-report/map/common/grid.js.html +554 -554
  176. package/coverage/lcov-report/map/common/index.html +158 -158
  177. package/coverage/lcov-report/map/common/index.js.html +68 -68
  178. package/coverage/lcov-report/map/common/meteo-model-grid-source.js.html +73 -73
  179. package/coverage/lcov-report/map/common/moment-utils.js.html +18 -18
  180. package/coverage/lcov-report/map/common/opendap-grid-source.js.html +484 -484
  181. package/coverage/lcov-report/map/common/opendap-utils.js.html +353 -353
  182. package/coverage/lcov-report/map/common/permissions.js.html +42 -36
  183. package/coverage/lcov-report/map/common/time-based-grid-source.js.html +59 -59
  184. package/coverage/lcov-report/map/common/tms-utils.js.html +6 -6
  185. package/coverage/lcov-report/map/common/wcs-grid-source.js.html +190 -190
  186. package/coverage/lcov-report/map/common/wcs-utils.js.html +339 -339
  187. package/coverage/lcov-report/map/common/weacast-grid-source.js.html +345 -345
  188. package/coverage/lcov-report/map/common/wfs-utils.js.html +11 -11
  189. package/coverage/lcov-report/map/common/wms-utils.js.html +8 -8
  190. package/coverage/lcov-report/map/common/wmts-utils.js.html +7 -7
  191. package/coverage/lcov.info +7022 -5894
  192. package/coverage/map/api/hooks/hooks.catalog.js.html +348 -258
  193. package/coverage/map/api/hooks/hooks.features.js.html +218 -218
  194. package/coverage/map/api/hooks/hooks.query.js.html +795 -810
  195. package/coverage/map/api/hooks/index.html +54 -54
  196. package/coverage/map/api/hooks/index.js.html +16 -16
  197. package/coverage/map/api/index.html +32 -32
  198. package/coverage/map/api/index.js.html +46 -46
  199. package/coverage/map/api/marshall.js.html +72 -72
  200. package/coverage/map/api/models/alerts.model.mongodb.js.html +24 -24
  201. package/coverage/map/api/models/catalog.model.mongodb.js.html +69 -27
  202. package/coverage/map/api/models/features.model.mongodb.js.html +80 -80
  203. package/coverage/map/api/models/index.html +69 -54
  204. package/coverage/map/api/models/projects.model.mongodb.js.html +26 -26
  205. package/coverage/map/api/models/styles.model.mongodb.js.html +112 -0
  206. package/coverage/map/api/services/alerts/alerts.hooks.js.html +136 -136
  207. package/coverage/map/api/services/alerts/alerts.service.js.html +343 -343
  208. package/coverage/map/api/services/alerts/index.html +32 -32
  209. package/coverage/map/api/services/catalog/catalog.hooks.js.html +177 -162
  210. package/coverage/map/api/services/catalog/index.html +21 -21
  211. package/coverage/map/api/services/daptiles/daptiles.service.js.html +1 -1
  212. package/coverage/map/api/services/daptiles/index.html +1 -1
  213. package/coverage/map/api/services/features/features.hooks.js.html +160 -160
  214. package/coverage/map/api/services/features/features.service.js.html +117 -117
  215. package/coverage/map/api/services/features/index.html +31 -31
  216. package/coverage/map/api/services/index.html +21 -21
  217. package/coverage/map/api/services/index.js.html +404 -296
  218. package/coverage/map/api/services/projects/index.html +21 -21
  219. package/coverage/map/api/services/projects/projects.hooks.js.html +237 -237
  220. package/coverage/map/api/services/styles/index.html +116 -0
  221. package/coverage/map/api/services/styles/styles.hooks.js.html +196 -0
  222. package/coverage/map/common/dynamic-grid-source.js.html +68 -68
  223. package/coverage/map/common/errors.js.html +16 -16
  224. package/coverage/map/common/geotiff-grid-source.js.html +267 -267
  225. package/coverage/map/common/grid.js.html +554 -554
  226. package/coverage/map/common/index.html +158 -158
  227. package/coverage/map/common/index.js.html +68 -68
  228. package/coverage/map/common/meteo-model-grid-source.js.html +73 -73
  229. package/coverage/map/common/moment-utils.js.html +18 -18
  230. package/coverage/map/common/opendap-grid-source.js.html +484 -484
  231. package/coverage/map/common/opendap-utils.js.html +353 -353
  232. package/coverage/map/common/permissions.js.html +42 -36
  233. package/coverage/map/common/time-based-grid-source.js.html +59 -59
  234. package/coverage/map/common/tms-utils.js.html +6 -6
  235. package/coverage/map/common/wcs-grid-source.js.html +190 -190
  236. package/coverage/map/common/wcs-utils.js.html +339 -339
  237. package/coverage/map/common/weacast-grid-source.js.html +345 -345
  238. package/coverage/map/common/wfs-utils.js.html +11 -11
  239. package/coverage/map/common/wms-utils.js.html +8 -8
  240. package/coverage/map/common/wmts-utils.js.html +7 -7
  241. package/coverage/tmp/coverage-151198-1753351220086-0.json +1 -0
  242. package/coverage/tmp/coverage-151210-1753351220070-0.json +1 -0
  243. package/coverage/tmp/coverage-151221-1753351129816-0.json +1 -0
  244. package/coverage/tmp/coverage-151233-1753351129803-0.json +1 -0
  245. package/coverage/tmp/coverage-151240-1753351129770-0.json +1 -0
  246. package/coverage/tmp/coverage-151307-1753351220058-0.json +1 -0
  247. package/coverage/tmp/coverage-151319-1753351220044-0.json +1 -0
  248. package/coverage/tmp/coverage-151326-1753351220010-0.json +1 -0
  249. package/map/api/services/styles/styles.hooks.js +1 -1
  250. package/map/client/components/KLayerEditor.vue +4 -0
  251. package/map/client/components/catalog/KLayerCategories.vue +2 -0
  252. package/map/client/components/stickies/KLevelSlider.vue +10 -8
  253. package/map/client/components/styles/KStyleEditor.vue +1 -1
  254. package/map/client/components/styles/KStyleManager.vue +7 -1
  255. package/map/client/composables/highlight.js +5 -1
  256. package/map/client/i18n/map_en.json +4 -1
  257. package/map/client/i18n/map_fr.json +4 -1
  258. package/map/client/mixins/globe/mixin.geojson-layers.js +11 -5
  259. package/map/client/mixins/mixin.activity.js +9 -0
  260. package/map/client/utils/utils.layers.js +0 -2
  261. package/package.json +1 -1
  262. package/test/api/core/push.test.js +1 -1
  263. package/test/api/core/test-log-2025-02-05.log +23 -0
  264. package/test/api/core/test-log-2025-05-21.log +15 -0
  265. package/test/api/core/test-log-2025-06-25.log +9 -0
  266. package/test/api/core/test-log-2025-07-24.log +44 -0
  267. package/test/api/map/test-log-2025-05-27.log +13 -0
  268. package/test/api/map/test-log-2025-06-23.log +7 -0
  269. package/test/api/map/{test-log-2025-05-26.log → test-log-2025-07-24.log} +3 -4
  270. package/coverage/tmp/coverage-122123-1739872365211-0.json +0 -1
  271. package/coverage/tmp/coverage-122135-1739872365196-0.json +0 -1
  272. package/coverage/tmp/coverage-122146-1739872365184-0.json +0 -1
  273. package/coverage/tmp/coverage-122158-1739872365169-0.json +0 -1
  274. package/coverage/tmp/coverage-122165-1739872365141-0.json +0 -1
  275. package/test/api/core/test-log-2025-05-26.log +0 -22
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">0% </span>
26
+ <span class="strong">96.4% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>0/167</span>
28
+ <span class='fraction'>161/167</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">0% </span>
33
+ <span class="strong">90.9% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>0/1</span>
35
+ <span class='fraction'>10/11</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">0% </span>
40
+ <span class="strong">83.33% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>0/1</span>
42
+ <span class='fraction'>5/6</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">0% </span>
47
+ <span class="strong">96.4% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>0/167</span>
49
+ <span class='fraction'>161/167</span>
50
50
  </div>
51
51
 
52
52
 
@@ -61,7 +61,7 @@
61
61
  </div>
62
62
  </template>
63
63
  </div>
64
- <div class='status-line low'></div>
64
+ <div class='status-line high'></div>
65
65
  <pre><table class="coverage">
66
66
  <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
67
  <a name='L2'></a><a href='#L2'>2</a>
@@ -230,340 +230,340 @@
230
230
  <a name='L165'></a><a href='#L165'>165</a>
231
231
  <a name='L166'></a><a href='#L166'>166</a>
232
232
  <a name='L167'></a><a href='#L167'>167</a>
233
- <a name='L168'></a><a href='#L168'>168</a></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
234
- <span class="cline-any cline-no">&nbsp;</span>
235
- <span class="cline-any cline-no">&nbsp;</span>
236
- <span class="cline-any cline-no">&nbsp;</span>
237
- <span class="cline-any cline-no">&nbsp;</span>
238
- <span class="cline-any cline-no">&nbsp;</span>
239
- <span class="cline-any cline-no">&nbsp;</span>
240
- <span class="cline-any cline-no">&nbsp;</span>
241
- <span class="cline-any cline-no">&nbsp;</span>
242
- <span class="cline-any cline-no">&nbsp;</span>
243
- <span class="cline-any cline-no">&nbsp;</span>
244
- <span class="cline-any cline-no">&nbsp;</span>
245
- <span class="cline-any cline-no">&nbsp;</span>
246
- <span class="cline-any cline-no">&nbsp;</span>
247
- <span class="cline-any cline-no">&nbsp;</span>
248
- <span class="cline-any cline-no">&nbsp;</span>
249
- <span class="cline-any cline-no">&nbsp;</span>
250
- <span class="cline-any cline-no">&nbsp;</span>
251
- <span class="cline-any cline-no">&nbsp;</span>
252
- <span class="cline-any cline-no">&nbsp;</span>
253
- <span class="cline-any cline-no">&nbsp;</span>
254
- <span class="cline-any cline-no">&nbsp;</span>
255
- <span class="cline-any cline-no">&nbsp;</span>
256
- <span class="cline-any cline-no">&nbsp;</span>
257
- <span class="cline-any cline-no">&nbsp;</span>
258
- <span class="cline-any cline-no">&nbsp;</span>
259
- <span class="cline-any cline-no">&nbsp;</span>
260
- <span class="cline-any cline-no">&nbsp;</span>
261
- <span class="cline-any cline-no">&nbsp;</span>
262
- <span class="cline-any cline-no">&nbsp;</span>
263
- <span class="cline-any cline-no">&nbsp;</span>
264
- <span class="cline-any cline-no">&nbsp;</span>
265
- <span class="cline-any cline-no">&nbsp;</span>
266
- <span class="cline-any cline-no">&nbsp;</span>
267
- <span class="cline-any cline-no">&nbsp;</span>
268
- <span class="cline-any cline-no">&nbsp;</span>
269
- <span class="cline-any cline-no">&nbsp;</span>
270
- <span class="cline-any cline-no">&nbsp;</span>
271
- <span class="cline-any cline-no">&nbsp;</span>
272
- <span class="cline-any cline-no">&nbsp;</span>
273
- <span class="cline-any cline-no">&nbsp;</span>
274
- <span class="cline-any cline-no">&nbsp;</span>
275
- <span class="cline-any cline-no">&nbsp;</span>
276
- <span class="cline-any cline-no">&nbsp;</span>
277
- <span class="cline-any cline-no">&nbsp;</span>
278
- <span class="cline-any cline-no">&nbsp;</span>
279
- <span class="cline-any cline-no">&nbsp;</span>
280
- <span class="cline-any cline-no">&nbsp;</span>
281
- <span class="cline-any cline-no">&nbsp;</span>
282
- <span class="cline-any cline-no">&nbsp;</span>
283
- <span class="cline-any cline-no">&nbsp;</span>
284
- <span class="cline-any cline-no">&nbsp;</span>
285
- <span class="cline-any cline-no">&nbsp;</span>
286
- <span class="cline-any cline-no">&nbsp;</span>
287
- <span class="cline-any cline-no">&nbsp;</span>
288
- <span class="cline-any cline-no">&nbsp;</span>
289
- <span class="cline-any cline-no">&nbsp;</span>
290
- <span class="cline-any cline-no">&nbsp;</span>
291
- <span class="cline-any cline-no">&nbsp;</span>
292
- <span class="cline-any cline-no">&nbsp;</span>
293
- <span class="cline-any cline-no">&nbsp;</span>
294
- <span class="cline-any cline-no">&nbsp;</span>
295
- <span class="cline-any cline-no">&nbsp;</span>
296
- <span class="cline-any cline-no">&nbsp;</span>
297
- <span class="cline-any cline-no">&nbsp;</span>
298
- <span class="cline-any cline-no">&nbsp;</span>
299
- <span class="cline-any cline-no">&nbsp;</span>
300
- <span class="cline-any cline-no">&nbsp;</span>
301
- <span class="cline-any cline-no">&nbsp;</span>
302
- <span class="cline-any cline-no">&nbsp;</span>
303
- <span class="cline-any cline-no">&nbsp;</span>
304
- <span class="cline-any cline-no">&nbsp;</span>
305
- <span class="cline-any cline-no">&nbsp;</span>
306
- <span class="cline-any cline-no">&nbsp;</span>
307
- <span class="cline-any cline-no">&nbsp;</span>
308
- <span class="cline-any cline-no">&nbsp;</span>
309
- <span class="cline-any cline-no">&nbsp;</span>
310
- <span class="cline-any cline-no">&nbsp;</span>
311
- <span class="cline-any cline-no">&nbsp;</span>
312
- <span class="cline-any cline-no">&nbsp;</span>
313
- <span class="cline-any cline-no">&nbsp;</span>
314
- <span class="cline-any cline-no">&nbsp;</span>
315
- <span class="cline-any cline-no">&nbsp;</span>
316
- <span class="cline-any cline-no">&nbsp;</span>
317
- <span class="cline-any cline-no">&nbsp;</span>
318
- <span class="cline-any cline-no">&nbsp;</span>
319
- <span class="cline-any cline-no">&nbsp;</span>
320
- <span class="cline-any cline-no">&nbsp;</span>
321
- <span class="cline-any cline-no">&nbsp;</span>
322
- <span class="cline-any cline-no">&nbsp;</span>
323
- <span class="cline-any cline-no">&nbsp;</span>
324
- <span class="cline-any cline-no">&nbsp;</span>
325
- <span class="cline-any cline-no">&nbsp;</span>
326
- <span class="cline-any cline-no">&nbsp;</span>
327
- <span class="cline-any cline-no">&nbsp;</span>
328
- <span class="cline-any cline-no">&nbsp;</span>
329
- <span class="cline-any cline-no">&nbsp;</span>
330
- <span class="cline-any cline-no">&nbsp;</span>
331
- <span class="cline-any cline-no">&nbsp;</span>
332
- <span class="cline-any cline-no">&nbsp;</span>
333
- <span class="cline-any cline-no">&nbsp;</span>
334
- <span class="cline-any cline-no">&nbsp;</span>
335
- <span class="cline-any cline-no">&nbsp;</span>
336
- <span class="cline-any cline-no">&nbsp;</span>
337
- <span class="cline-any cline-no">&nbsp;</span>
338
- <span class="cline-any cline-no">&nbsp;</span>
339
- <span class="cline-any cline-no">&nbsp;</span>
340
- <span class="cline-any cline-no">&nbsp;</span>
341
- <span class="cline-any cline-no">&nbsp;</span>
342
- <span class="cline-any cline-no">&nbsp;</span>
343
- <span class="cline-any cline-no">&nbsp;</span>
344
- <span class="cline-any cline-no">&nbsp;</span>
345
- <span class="cline-any cline-no">&nbsp;</span>
346
- <span class="cline-any cline-no">&nbsp;</span>
347
- <span class="cline-any cline-no">&nbsp;</span>
348
- <span class="cline-any cline-no">&nbsp;</span>
349
- <span class="cline-any cline-no">&nbsp;</span>
350
- <span class="cline-any cline-no">&nbsp;</span>
351
- <span class="cline-any cline-no">&nbsp;</span>
352
- <span class="cline-any cline-no">&nbsp;</span>
353
- <span class="cline-any cline-no">&nbsp;</span>
354
- <span class="cline-any cline-no">&nbsp;</span>
355
- <span class="cline-any cline-no">&nbsp;</span>
356
- <span class="cline-any cline-no">&nbsp;</span>
357
- <span class="cline-any cline-no">&nbsp;</span>
358
- <span class="cline-any cline-no">&nbsp;</span>
359
- <span class="cline-any cline-no">&nbsp;</span>
360
- <span class="cline-any cline-no">&nbsp;</span>
361
- <span class="cline-any cline-no">&nbsp;</span>
362
- <span class="cline-any cline-no">&nbsp;</span>
363
- <span class="cline-any cline-no">&nbsp;</span>
364
- <span class="cline-any cline-no">&nbsp;</span>
365
- <span class="cline-any cline-no">&nbsp;</span>
366
- <span class="cline-any cline-no">&nbsp;</span>
367
- <span class="cline-any cline-no">&nbsp;</span>
368
- <span class="cline-any cline-no">&nbsp;</span>
369
- <span class="cline-any cline-no">&nbsp;</span>
370
- <span class="cline-any cline-no">&nbsp;</span>
371
- <span class="cline-any cline-no">&nbsp;</span>
372
- <span class="cline-any cline-no">&nbsp;</span>
373
- <span class="cline-any cline-no">&nbsp;</span>
374
- <span class="cline-any cline-no">&nbsp;</span>
375
- <span class="cline-any cline-no">&nbsp;</span>
376
- <span class="cline-any cline-no">&nbsp;</span>
377
- <span class="cline-any cline-no">&nbsp;</span>
378
- <span class="cline-any cline-no">&nbsp;</span>
379
- <span class="cline-any cline-no">&nbsp;</span>
380
- <span class="cline-any cline-no">&nbsp;</span>
381
- <span class="cline-any cline-no">&nbsp;</span>
382
- <span class="cline-any cline-no">&nbsp;</span>
383
- <span class="cline-any cline-no">&nbsp;</span>
384
- <span class="cline-any cline-no">&nbsp;</span>
385
- <span class="cline-any cline-no">&nbsp;</span>
386
- <span class="cline-any cline-no">&nbsp;</span>
387
- <span class="cline-any cline-no">&nbsp;</span>
388
- <span class="cline-any cline-no">&nbsp;</span>
389
- <span class="cline-any cline-no">&nbsp;</span>
390
- <span class="cline-any cline-no">&nbsp;</span>
391
- <span class="cline-any cline-no">&nbsp;</span>
392
- <span class="cline-any cline-no">&nbsp;</span>
393
- <span class="cline-any cline-no">&nbsp;</span>
394
- <span class="cline-any cline-no">&nbsp;</span>
395
- <span class="cline-any cline-no">&nbsp;</span>
396
- <span class="cline-any cline-no">&nbsp;</span>
397
- <span class="cline-any cline-no">&nbsp;</span>
398
- <span class="cline-any cline-no">&nbsp;</span>
399
- <span class="cline-any cline-no">&nbsp;</span>
400
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js"><span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ><span class="branch-0 cbranch-no" title="branch not covered" >import _ from 'lodash'</span></span></span>
401
- <span class="cstat-no" title="statement not covered" >import fetch from 'node-fetch'</span>
402
- <span class="cstat-no" title="statement not covered" >import xml2js from 'xml2js'</span>
403
- <span class="cstat-no" title="statement not covered" >import { buildUrl } from '../../core/common/index.js'</span>
404
- <span class="cstat-no" title="statement not covered" ></span>
405
- <span class="cstat-no" title="statement not covered" >// https://www.opengeospatial.org/standards/wcs</span>
406
- <span class="cstat-no" title="statement not covered" ></span>
407
- <span class="cstat-no" title="statement not covered" >export function fetchAsJson (query) {</span>
408
- <span class="cstat-no" title="statement not covered" > return fetch(query, { redirect: 'follow' })</span>
409
- <span class="cstat-no" title="statement not covered" > .then(response =&gt; response.text())</span>
410
- <span class="cstat-no" title="statement not covered" > .then(txt =&gt; xml2js.parseStringPromise(txt, { tagNameProcessors: [xml2js.processors.stripPrefix] }))</span>
411
- <span class="cstat-no" title="statement not covered" >}</span>
412
- <span class="cstat-no" title="statement not covered" ></span>
413
- <span class="cstat-no" title="statement not covered" >export async function GetCapabilities (url, searchParams = {}) {</span>
233
+ <a name='L168'></a><a href='#L168'>168</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
234
+ <span class="cline-any cline-yes">1x</span>
235
+ <span class="cline-any cline-yes">1x</span>
236
+ <span class="cline-any cline-yes">1x</span>
237
+ <span class="cline-any cline-yes">1x</span>
238
+ <span class="cline-any cline-yes">1x</span>
239
+ <span class="cline-any cline-yes">1x</span>
240
+ <span class="cline-any cline-yes">1x</span>
241
+ <span class="cline-any cline-yes">1x</span>
242
+ <span class="cline-any cline-yes">1x</span>
243
+ <span class="cline-any cline-yes">1x</span>
244
+ <span class="cline-any cline-yes">1x</span>
245
+ <span class="cline-any cline-yes">1x</span>
246
+ <span class="cline-any cline-yes">1x</span>
247
+ <span class="cline-any cline-no">&nbsp;</span>
248
+ <span class="cline-any cline-no">&nbsp;</span>
249
+ <span class="cline-any cline-no">&nbsp;</span>
250
+ <span class="cline-any cline-no">&nbsp;</span>
251
+ <span class="cline-any cline-no">&nbsp;</span>
252
+ <span class="cline-any cline-no">&nbsp;</span>
253
+ <span class="cline-any cline-yes">1x</span>
254
+ <span class="cline-any cline-yes">1x</span>
255
+ <span class="cline-any cline-yes">1x</span>
256
+ <span class="cline-any cline-yes">1x</span>
257
+ <span class="cline-any cline-yes">1x</span>
258
+ <span class="cline-any cline-yes">1x</span>
259
+ <span class="cline-any cline-yes">1x</span>
260
+ <span class="cline-any cline-yes">1x</span>
261
+ <span class="cline-any cline-yes">1x</span>
262
+ <span class="cline-any cline-yes">1x</span>
263
+ <span class="cline-any cline-yes">1x</span>
264
+ <span class="cline-any cline-yes">1x</span>
265
+ <span class="cline-any cline-yes">1x</span>
266
+ <span class="cline-any cline-yes">1x</span>
267
+ <span class="cline-any cline-yes">1x</span>
268
+ <span class="cline-any cline-yes">1x</span>
269
+ <span class="cline-any cline-yes">1x</span>
270
+ <span class="cline-any cline-yes">1x</span>
271
+ <span class="cline-any cline-yes">1x</span>
272
+ <span class="cline-any cline-yes">1x</span>
273
+ <span class="cline-any cline-yes">1x</span>
274
+ <span class="cline-any cline-yes">1x</span>
275
+ <span class="cline-any cline-yes">1x</span>
276
+ <span class="cline-any cline-yes">1x</span>
277
+ <span class="cline-any cline-yes">1x</span>
278
+ <span class="cline-any cline-yes">1x</span>
279
+ <span class="cline-any cline-yes">1x</span>
280
+ <span class="cline-any cline-yes">1x</span>
281
+ <span class="cline-any cline-yes">1x</span>
282
+ <span class="cline-any cline-yes">1x</span>
283
+ <span class="cline-any cline-yes">1x</span>
284
+ <span class="cline-any cline-yes">1x</span>
285
+ <span class="cline-any cline-yes">1x</span>
286
+ <span class="cline-any cline-yes">1x</span>
287
+ <span class="cline-any cline-yes">1x</span>
288
+ <span class="cline-any cline-yes">1x</span>
289
+ <span class="cline-any cline-yes">1x</span>
290
+ <span class="cline-any cline-yes">1x</span>
291
+ <span class="cline-any cline-yes">1x</span>
292
+ <span class="cline-any cline-yes">1x</span>
293
+ <span class="cline-any cline-yes">2x</span>
294
+ <span class="cline-any cline-yes">2x</span>
295
+ <span class="cline-any cline-yes">2x</span>
296
+ <span class="cline-any cline-yes">2x</span>
297
+ <span class="cline-any cline-yes">1x</span>
298
+ <span class="cline-any cline-yes">1x</span>
299
+ <span class="cline-any cline-yes">1x</span>
300
+ <span class="cline-any cline-yes">1x</span>
301
+ <span class="cline-any cline-yes">1x</span>
302
+ <span class="cline-any cline-yes">1x</span>
303
+ <span class="cline-any cline-yes">1x</span>
304
+ <span class="cline-any cline-yes">1x</span>
305
+ <span class="cline-any cline-yes">1x</span>
306
+ <span class="cline-any cline-yes">1x</span>
307
+ <span class="cline-any cline-yes">1x</span>
308
+ <span class="cline-any cline-yes">1x</span>
309
+ <span class="cline-any cline-yes">1x</span>
310
+ <span class="cline-any cline-yes">1x</span>
311
+ <span class="cline-any cline-yes">1x</span>
312
+ <span class="cline-any cline-yes">1x</span>
313
+ <span class="cline-any cline-yes">1x</span>
314
+ <span class="cline-any cline-yes">1x</span>
315
+ <span class="cline-any cline-yes">1x</span>
316
+ <span class="cline-any cline-yes">1x</span>
317
+ <span class="cline-any cline-yes">1x</span>
318
+ <span class="cline-any cline-yes">1x</span>
319
+ <span class="cline-any cline-yes">1x</span>
320
+ <span class="cline-any cline-yes">1x</span>
321
+ <span class="cline-any cline-yes">1x</span>
322
+ <span class="cline-any cline-yes">1x</span>
323
+ <span class="cline-any cline-yes">1x</span>
324
+ <span class="cline-any cline-yes">1x</span>
325
+ <span class="cline-any cline-yes">1x</span>
326
+ <span class="cline-any cline-yes">1x</span>
327
+ <span class="cline-any cline-yes">1x</span>
328
+ <span class="cline-any cline-yes">1x</span>
329
+ <span class="cline-any cline-yes">1x</span>
330
+ <span class="cline-any cline-yes">1x</span>
331
+ <span class="cline-any cline-yes">1x</span>
332
+ <span class="cline-any cline-yes">1x</span>
333
+ <span class="cline-any cline-yes">1x</span>
334
+ <span class="cline-any cline-yes">1x</span>
335
+ <span class="cline-any cline-yes">1x</span>
336
+ <span class="cline-any cline-yes">1x</span>
337
+ <span class="cline-any cline-yes">1x</span>
338
+ <span class="cline-any cline-yes">1x</span>
339
+ <span class="cline-any cline-yes">1x</span>
340
+ <span class="cline-any cline-yes">1x</span>
341
+ <span class="cline-any cline-yes">1x</span>
342
+ <span class="cline-any cline-yes">1x</span>
343
+ <span class="cline-any cline-yes">1x</span>
344
+ <span class="cline-any cline-yes">1x</span>
345
+ <span class="cline-any cline-yes">1x</span>
346
+ <span class="cline-any cline-yes">1x</span>
347
+ <span class="cline-any cline-yes">1x</span>
348
+ <span class="cline-any cline-yes">1x</span>
349
+ <span class="cline-any cline-yes">1x</span>
350
+ <span class="cline-any cline-yes">1x</span>
351
+ <span class="cline-any cline-yes">1x</span>
352
+ <span class="cline-any cline-yes">1x</span>
353
+ <span class="cline-any cline-yes">1x</span>
354
+ <span class="cline-any cline-yes">1x</span>
355
+ <span class="cline-any cline-yes">1x</span>
356
+ <span class="cline-any cline-yes">1x</span>
357
+ <span class="cline-any cline-yes">1x</span>
358
+ <span class="cline-any cline-yes">1x</span>
359
+ <span class="cline-any cline-yes">1x</span>
360
+ <span class="cline-any cline-yes">1x</span>
361
+ <span class="cline-any cline-yes">1x</span>
362
+ <span class="cline-any cline-yes">1x</span>
363
+ <span class="cline-any cline-yes">1x</span>
364
+ <span class="cline-any cline-yes">1x</span>
365
+ <span class="cline-any cline-yes">1x</span>
366
+ <span class="cline-any cline-yes">1x</span>
367
+ <span class="cline-any cline-yes">1x</span>
368
+ <span class="cline-any cline-yes">1x</span>
369
+ <span class="cline-any cline-yes">1x</span>
370
+ <span class="cline-any cline-yes">1x</span>
371
+ <span class="cline-any cline-yes">1x</span>
372
+ <span class="cline-any cline-yes">1x</span>
373
+ <span class="cline-any cline-yes">1x</span>
374
+ <span class="cline-any cline-yes">1x</span>
375
+ <span class="cline-any cline-yes">1x</span>
376
+ <span class="cline-any cline-yes">1x</span>
377
+ <span class="cline-any cline-yes">1x</span>
378
+ <span class="cline-any cline-yes">1x</span>
379
+ <span class="cline-any cline-yes">1x</span>
380
+ <span class="cline-any cline-yes">1x</span>
381
+ <span class="cline-any cline-yes">1x</span>
382
+ <span class="cline-any cline-yes">1x</span>
383
+ <span class="cline-any cline-yes">1x</span>
384
+ <span class="cline-any cline-yes">1x</span>
385
+ <span class="cline-any cline-yes">1x</span>
386
+ <span class="cline-any cline-yes">1x</span>
387
+ <span class="cline-any cline-yes">1x</span>
388
+ <span class="cline-any cline-yes">1x</span>
389
+ <span class="cline-any cline-yes">1x</span>
390
+ <span class="cline-any cline-yes">1x</span>
391
+ <span class="cline-any cline-yes">1x</span>
392
+ <span class="cline-any cline-yes">1x</span>
393
+ <span class="cline-any cline-yes">1x</span>
394
+ <span class="cline-any cline-yes">1x</span>
395
+ <span class="cline-any cline-yes">1x</span>
396
+ <span class="cline-any cline-yes">1x</span>
397
+ <span class="cline-any cline-yes">1x</span>
398
+ <span class="cline-any cline-yes">1x</span>
399
+ <span class="cline-any cline-yes">1x</span>
400
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import _ from 'lodash'
401
+ import fetch from 'node-fetch'
402
+ import xml2js from 'xml2js'
403
+ import { buildUrl } from '../../core/common/index.js'
404
+ &nbsp;
405
+ // https://www.opengeospatial.org/standards/wcs
406
+ &nbsp;
407
+ export function fetchAsJson (query, headers = {}) {
408
+ return fetch(query, { redirect: 'follow', headers })
409
+ .then(response =&gt; response.text())
410
+ .then(txt =&gt; xml2js.parseStringPromise(txt, { tagNameProcessors: [xml2js.processors.stripPrefix] }))
411
+ }
412
+ &nbsp;
413
+ export <span class="fstat-no" title="function not covered" >async function GetCapabilities (url, searchParams = {}, headers = {}) {</span>
414
414
  <span class="cstat-no" title="statement not covered" > const query = buildUrl(url, Object.assign({</span>
415
415
  <span class="cstat-no" title="statement not covered" > SERVICE: 'WCS',</span>
416
416
  <span class="cstat-no" title="statement not covered" > REQUEST: 'GetCapabilities'</span>
417
417
  <span class="cstat-no" title="statement not covered" > }, searchParams))</span>
418
- <span class="cstat-no" title="statement not covered" > return fetchAsJson(query)</span>
419
- <span class="cstat-no" title="statement not covered" >}</span>
420
- <span class="cstat-no" title="statement not covered" ></span>
421
- <span class="cstat-no" title="statement not covered" >export async function DescribeCoverage (url, version, coverage, searchParams = {}) {</span>
422
- <span class="cstat-no" title="statement not covered" > const query = buildUrl(url, Object.assign({</span>
423
- <span class="cstat-no" title="statement not covered" > SERVICE: 'WCS',</span>
424
- <span class="cstat-no" title="statement not covered" > VERSION: version,</span>
425
- <span class="cstat-no" title="statement not covered" > REQUEST: 'DescribeCoverage',</span>
426
- <span class="cstat-no" title="statement not covered" > COVERAGE: coverage</span>
427
- <span class="cstat-no" title="statement not covered" > }, searchParams))</span>
428
- <span class="cstat-no" title="statement not covered" > return fetchAsJson(query)</span>
429
- <span class="cstat-no" title="statement not covered" >}</span>
430
- <span class="cstat-no" title="statement not covered" ></span>
431
- <span class="cstat-no" title="statement not covered" >export async function GetCoverage (abort, url, version, coverage, format, bbox, width, height, searchParams = {}) {</span>
432
- <span class="cstat-no" title="statement not covered" > const query = buildUrl(url, Object.assign({</span>
433
- <span class="cstat-no" title="statement not covered" > SERVICE: 'WCS',</span>
434
- <span class="cstat-no" title="statement not covered" > VERSION: version,</span>
435
- <span class="cstat-no" title="statement not covered" > REQUEST: 'GetCoverage',</span>
436
- <span class="cstat-no" title="statement not covered" > COVERAGE: coverage,</span>
437
- <span class="cstat-no" title="statement not covered" > CRS: 'EPSG:4326',</span>
438
- <span class="cstat-no" title="statement not covered" > BBOX: `${bbox.join(',')}`,</span>
439
- <span class="cstat-no" title="statement not covered" > WIDTH: width,</span>
440
- <span class="cstat-no" title="statement not covered" > HEIGHT: height,</span>
441
- <span class="cstat-no" title="statement not covered" > FORMAT: format</span>
442
- <span class="cstat-no" title="statement not covered" > }, searchParams))</span>
443
- <span class="cstat-no" title="statement not covered" > return fetch(query, { method: 'get', signal: abort })</span>
444
- <span class="cstat-no" title="statement not covered" > // using a Blob is problematic with node.js since there's no support for it</span>
445
- <span class="cstat-no" title="statement not covered" > // instead use an ArrayBuffer</span>
446
- <span class="cstat-no" title="statement not covered" > // .then(response =&gt; response.blob())</span>
447
- <span class="cstat-no" title="statement not covered" > .then(response =&gt; response.arrayBuffer())</span>
448
- <span class="cstat-no" title="statement not covered" >}</span>
449
- <span class="cstat-no" title="statement not covered" ></span>
450
- <span class="cstat-no" title="statement not covered" >export function GetCoverageSpatialBounds (coverage) {</span>
451
- <span class="cstat-no" title="statement not covered" > // 1.0.0</span>
452
- <span class="cstat-no" title="statement not covered" > // CoverageDescription / CoverageOffering / lonLatEnvelope</span>
453
- <span class="cstat-no" title="statement not covered" > const envelope = _.get(coverage, 'CoverageDescription.CoverageOffering[0].lonLatEnvelope[0].pos', null)</span>
454
- <span class="cstat-no" title="statement not covered" > if (!envelope) { return null }</span>
455
- <span class="cstat-no" title="statement not covered" > // assume lat long &amp; deg &amp; srs = 4326</span>
456
- <span class="cstat-no" title="statement not covered" > // TODO: check it</span>
457
- <span class="cstat-no" title="statement not covered" > const lats = []</span>
458
- <span class="cstat-no" title="statement not covered" > const lons = []</span>
459
- <span class="cstat-no" title="statement not covered" > for (const p of envelope) {</span>
460
- <span class="cstat-no" title="statement not covered" > const lonLat = p.split(' ')</span>
461
- <span class="cstat-no" title="statement not covered" > lons.push(parseFloat(lonLat[0]))</span>
462
- <span class="cstat-no" title="statement not covered" > lats.push(parseFloat(lonLat[1]))</span>
463
- <span class="cstat-no" title="statement not covered" > }</span>
464
- <span class="cstat-no" title="statement not covered" > const minLatLon = [Math.min(...lats), Math.min(...lons)]</span>
465
- <span class="cstat-no" title="statement not covered" > const maxLatLon = [Math.max(...lats), Math.max(...lons)]</span>
466
- <span class="cstat-no" title="statement not covered" > return [minLatLon[0], minLatLon[1], maxLatLon[0], maxLatLon[1]]</span>
418
+ <span class="cstat-no" title="statement not covered" > return fetchAsJson(query, headers)</span>
467
419
  <span class="cstat-no" title="statement not covered" >}</span>
468
- <span class="cstat-no" title="statement not covered" ></span>
469
- <span class="cstat-no" title="statement not covered" >export function GetSupportedFormats (coverage) {</span>
470
- <span class="cstat-no" title="statement not covered" > // 1.0.0</span>
471
- <span class="cstat-no" title="statement not covered" > // CoverageDescription / CoverageOffering / supportedFormats</span>
472
- <span class="cstat-no" title="statement not covered" > const root = _.get(coverage, 'CoverageDescription.CoverageOffering[0].supportedFormats[0]', null)</span>
473
- <span class="cstat-no" title="statement not covered" > // const nativ = _.get(root, '$.nativeFormat', null)</span>
474
- <span class="cstat-no" title="statement not covered" > const formats = _.get(root, 'formats')</span>
475
- <span class="cstat-no" title="statement not covered" > // TODO: put native format as first entry</span>
476
- <span class="cstat-no" title="statement not covered" > // MapServer nativeFormat='geotiff' but this is not listed in</span>
477
- <span class="cstat-no" title="statement not covered" > // formats list ...</span>
478
- <span class="cstat-no" title="statement not covered" > /*</span>
479
- <span class="cstat-no" title="statement not covered" > if (nativ &amp;&amp; formats) {</span>
480
- <span class="cstat-no" title="statement not covered" > }</span>
481
- <span class="cstat-no" title="statement not covered" > */</span>
482
- <span class="cstat-no" title="statement not covered" > return formats</span>
483
- <span class="cstat-no" title="statement not covered" >}</span>
484
- <span class="cstat-no" title="statement not covered" ></span>
485
- <span class="cstat-no" title="statement not covered" >/*</span>
486
- <span class="cstat-no" title="statement not covered" >export function makeGetCapabilitiesQuery(url) {</span>
487
- <span class="cstat-no" title="statement not covered" > return `${url}?SERVICE=WCS&amp;VERSION=2.0.1&amp;REQUEST=GetCapabilities`</span>
488
- <span class="cstat-no" title="statement not covered" >}</span>
489
- <span class="cstat-no" title="statement not covered" ></span>
490
- <span class="cstat-no" title="statement not covered" >export function makeDescribeCoverageQuery(url, coverage) {</span>
491
- <span class="cstat-no" title="statement not covered" > return `${url}?SERVICE=WCS&amp;VERSION=2.0.1&amp;REQUEST=DescribeCoverage&amp;COVERAGEID=${coverage}`</span>
492
- <span class="cstat-no" title="statement not covered" >}</span>
493
- <span class="cstat-no" title="statement not covered" ></span>
494
- <span class="cstat-no" title="statement not covered" >export function makeGetCoverageQuery (url, coverage, format, subsets, scaleSizes) {</span>
495
- <span class="cstat-no" title="statement not covered" > let query = `${url}?SERVICE=WCS&amp;VERSION=2.0.1&amp;</span>
496
- <span class="cstat-no" title="statement not covered" >REQUEST=GetCoverage&amp;COVERAGEID=${coverage}&amp;FORMAT=${format}`</span>
497
- <span class="cstat-no" title="statement not covered" > for (const subset of subsets) {</span>
498
- <span class="cstat-no" title="statement not covered" > query += `&amp;SUBSET=${subset.axis}(${subset.low},${subset.high})`</span>
499
- <span class="cstat-no" title="statement not covered" > }</span>
500
- <span class="cstat-no" title="statement not covered" > if (scaleSizes) {</span>
501
- <span class="cstat-no" title="statement not covered" > query += `&amp;SCALESIZE=${scaleSizes[0].axis}(${scaleSizes[0].size})`</span>
502
- <span class="cstat-no" title="statement not covered" > for (let i = 1; i &lt; scaleSizes.length; ++i) {</span>
503
- <span class="cstat-no" title="statement not covered" > query += `,${scaleSizes[i].axis}(${scaleSizes[i].size})`</span>
504
- <span class="cstat-no" title="statement not covered" > }</span>
505
- <span class="cstat-no" title="statement not covered" > }</span>
506
- <span class="cstat-no" title="statement not covered" > return query</span>
507
- <span class="cstat-no" title="statement not covered" >}</span>
508
- <span class="cstat-no" title="statement not covered" ></span>
509
- <span class="cstat-no" title="statement not covered" >export async function GetCapabilities (url) {</span>
510
- <span class="cstat-no" title="statement not covered" > const query = makeGetCapabilitiesQuery(url)</span>
511
- <span class="cstat-no" title="statement not covered" > return fetch(query)</span>
512
- <span class="cstat-no" title="statement not covered" > .then(response =&gt; response.text())</span>
513
- <span class="cstat-no" title="statement not covered" > .then(txt =&gt; xml2js.parseStringPromise(txt))</span>
514
- <span class="cstat-no" title="statement not covered" >}</span>
515
- <span class="cstat-no" title="statement not covered" ></span>
516
- <span class="cstat-no" title="statement not covered" >export async function DescribeCoverage (url, coverage) {</span>
517
- <span class="cstat-no" title="statement not covered" > const query = makeDescribeCoverageQuery(url, coverage)</span>
518
- <span class="cstat-no" title="statement not covered" > return fetch(query)</span>
519
- <span class="cstat-no" title="statement not covered" > .then(response =&gt; response.text())</span>
520
- <span class="cstat-no" title="statement not covered" > .then(txt =&gt; xml2js.parseStringPromise(txt))</span>
521
- <span class="cstat-no" title="statement not covered" >}</span>
522
- <span class="cstat-no" title="statement not covered" ></span>
523
- <span class="cstat-no" title="statement not covered" >export async function GetCoverage (url, coverage, format, bbox, width, height, axisNames) {</span>
524
- <span class="cstat-no" title="statement not covered" > const subsets = [</span>
525
- <span class="cstat-no" title="statement not covered" > { axis: axisNames[0], low: bbox[0], high: bbox[2] }</span>
526
- <span class="cstat-no" title="statement not covered" > , { axis: axisNames[1], low: bbox[1], high: bbox[3] } ]</span>
527
- <span class="cstat-no" title="statement not covered" > const scaleSizes = [</span>
528
- <span class="cstat-no" title="statement not covered" > { axis: axisNames[0], size: height }</span>
529
- <span class="cstat-no" title="statement not covered" > , { axis: axisNames[1], size: width } ]</span>
530
- <span class="cstat-no" title="statement not covered" > const query = makeGetCoverageQuery(url, coverage, format, subsets, scaleSizes)</span>
531
- <span class="cstat-no" title="statement not covered" > return fetch(query)</span>
532
- <span class="cstat-no" title="statement not covered" > .then(response =&gt; response.blob())</span>
533
- <span class="cstat-no" title="statement not covered" >}</span>
534
- <span class="cstat-no" title="statement not covered" ></span>
535
- <span class="cstat-no" title="statement not covered" >export function GetSupportedFormats (capabilities) {</span>
536
- <span class="cstat-no" title="statement not covered" > // 2.0.1</span>
537
- <span class="cstat-no" title="statement not covered" > // wcs:Capabilities / wcs:ServiceMetadata / wcs:formatSupported</span>
538
- <span class="cstat-no" title="statement not covered" > return _.get(capabilities, 'wcs:Capabilities.wcs:ServiceMetadata[0].wcs:formatSupported', null)</span>
539
- <span class="cstat-no" title="statement not covered" >}</span>
540
- <span class="cstat-no" title="statement not covered" ></span>
541
- <span class="cstat-no" title="statement not covered" >export function GetOfferedCoverages (capabilities) {</span>
542
- <span class="cstat-no" title="statement not covered" > // 2.0.1</span>
543
- <span class="cstat-no" title="statement not covered" > // wcs:Capabilities / wcs:Contents / wcs:CoverageSummary / wcs:CoverageId</span>
544
- <span class="cstat-no" title="statement not covered" > const summary = _.get(capabilities, 'wcs:Capabilities.wcs:Contents[0].wcs:CoverageSummary')</span>
545
- <span class="cstat-no" title="statement not covered" > if (!summary)</span>
546
- <span class="cstat-no" title="statement not covered" > return null</span>
547
- <span class="cstat-no" title="statement not covered" > return summary.map(node =&gt; _.get(node, 'wcs:CoverageId[0]'))</span>
548
- <span class="cstat-no" title="statement not covered" >}</span>
549
- <span class="cstat-no" title="statement not covered" ></span>
550
- <span class="cstat-no" title="statement not covered" >export function GetCoverageSpatialBounds (coverage) {</span>
551
- <span class="cstat-no" title="statement not covered" > // 2.0.1</span>
552
- <span class="cstat-no" title="statement not covered" > // wcs:CoverageDescriptions / gml:boundedBy / gml:Envelope</span>
553
- <span class="cstat-no" title="statement not covered" > const envelope = _.get(coverage, 'wcs:CoverageDescriptions.wcs:CoverageDescription[0].gml:boundedBy[0].gml:Envelope[0]')</span>
554
- <span class="cstat-no" title="statement not covered" > if (!envelope)</span>
555
- <span class="cstat-no" title="statement not covered" > return null</span>
556
- <span class="cstat-no" title="statement not covered" > // assume lat long &amp; deg &amp; srs = 4326</span>
557
- <span class="cstat-no" title="statement not covered" > // TODO: check it</span>
558
- <span class="cstat-no" title="statement not covered" > const lowerCorner = _.get(envelope, 'gml:lowerCorner[0]', null)</span>
559
- <span class="cstat-no" title="statement not covered" > const upperCorner = _.get(envelope, 'gml:upperCorner[0]', null)</span>
560
- <span class="cstat-no" title="statement not covered" > if (!lowerCorner || !upperCorner)</span>
561
- <span class="cstat-no" title="statement not covered" > return null</span>
562
- <span class="cstat-no" title="statement not covered" > const minLatLon = lowerCorner.split(' ').map(val =&gt; parseFloat(val))</span>
563
- <span class="cstat-no" title="statement not covered" > const maxLatLon = upperCorner.split(' ').map(val =&gt; parseFloat(val))</span>
564
- <span class="cstat-no" title="statement not covered" > return [minLatLon[0], minLatLon[1], maxLatLon[0], maxLatLon[1]]</span>
565
- <span class="cstat-no" title="statement not covered" >}</span>
566
- <span class="cstat-no" title="statement not covered" >*/</span>
420
+ &nbsp;
421
+ export async function DescribeCoverage (url, version, coverage, searchParams = {}, headers = {}) {
422
+ const query = buildUrl(url, Object.assign({
423
+ SERVICE: 'WCS',
424
+ VERSION: version,
425
+ REQUEST: 'DescribeCoverage',
426
+ COVERAGE: coverage
427
+ }, searchParams))
428
+ return fetchAsJson(query, headers)
429
+ }
430
+ &nbsp;
431
+ export async function GetCoverage (abort, url, version, coverage, format, bbox, width, height, searchParams = {}, headers = {}) {
432
+ const query = buildUrl(url, Object.assign({
433
+ SERVICE: 'WCS',
434
+ VERSION: version,
435
+ REQUEST: 'GetCoverage',
436
+ COVERAGE: coverage,
437
+ CRS: 'EPSG:4326',
438
+ BBOX: `${bbox.join(',')}`,
439
+ WIDTH: width,
440
+ HEIGHT: height,
441
+ FORMAT: format
442
+ }, searchParams))
443
+ return fetch(query, { method: 'get', signal: abort, headers })
444
+ // using a Blob is problematic with node.js since there's no support for it
445
+ // instead use an ArrayBuffer
446
+ // .then(response =&gt; response.blob())
447
+ .then(response =&gt; response.arrayBuffer())
448
+ }
449
+ &nbsp;
450
+ export function GetCoverageSpatialBounds (coverage) {
451
+ // 1.0.0
452
+ // CoverageDescription / CoverageOffering / lonLatEnvelope
453
+ const envelope = _.get(coverage, 'CoverageDescription.CoverageOffering[0].lonLatEnvelope[0].pos', null)
454
+ if (!envelope) <span class="branch-0 cbranch-no" title="branch not covered" >{ return null }</span>
455
+ // assume lat long &amp; deg &amp; srs = 4326
456
+ // TODO: check it
457
+ const lats = []
458
+ const lons = []
459
+ for (const p of envelope) {
460
+ const lonLat = p.split(' ')
461
+ lons.push(parseFloat(lonLat[0]))
462
+ lats.push(parseFloat(lonLat[1]))
463
+ }
464
+ const minLatLon = [Math.min(...lats), Math.min(...lons)]
465
+ const maxLatLon = [Math.max(...lats), Math.max(...lons)]
466
+ return [minLatLon[0], minLatLon[1], maxLatLon[0], maxLatLon[1]]
467
+ }
468
+ &nbsp;
469
+ export function GetSupportedFormats (coverage) {
470
+ // 1.0.0
471
+ // CoverageDescription / CoverageOffering / supportedFormats
472
+ const root = _.get(coverage, 'CoverageDescription.CoverageOffering[0].supportedFormats[0]', null)
473
+ // const nativ = _.get(root, '$.nativeFormat', null)
474
+ const formats = _.get(root, 'formats')
475
+ // TODO: put native format as first entry
476
+ // MapServer nativeFormat='geotiff' but this is not listed in
477
+ // formats list ...
478
+ /*
479
+ if (nativ &amp;&amp; formats) {
480
+ }
481
+ */
482
+ return formats
483
+ }
484
+ &nbsp;
485
+ /*
486
+ export function makeGetCapabilitiesQuery(url) {
487
+ return `${url}?SERVICE=WCS&amp;VERSION=2.0.1&amp;REQUEST=GetCapabilities`
488
+ }
489
+ &nbsp;
490
+ export function makeDescribeCoverageQuery(url, coverage) {
491
+ return `${url}?SERVICE=WCS&amp;VERSION=2.0.1&amp;REQUEST=DescribeCoverage&amp;COVERAGEID=${coverage}`
492
+ }
493
+ &nbsp;
494
+ export function makeGetCoverageQuery (url, coverage, format, subsets, scaleSizes) {
495
+ let query = `${url}?SERVICE=WCS&amp;VERSION=2.0.1&amp;
496
+ REQUEST=GetCoverage&amp;COVERAGEID=${coverage}&amp;FORMAT=${format}`
497
+ for (const subset of subsets) {
498
+ query += `&amp;SUBSET=${subset.axis}(${subset.low},${subset.high})`
499
+ }
500
+ if (scaleSizes) {
501
+ query += `&amp;SCALESIZE=${scaleSizes[0].axis}(${scaleSizes[0].size})`
502
+ for (let i = 1; i &lt; scaleSizes.length; ++i) {
503
+ query += `,${scaleSizes[i].axis}(${scaleSizes[i].size})`
504
+ }
505
+ }
506
+ return query
507
+ }
508
+ &nbsp;
509
+ export async function GetCapabilities (url) {
510
+ const query = makeGetCapabilitiesQuery(url)
511
+ return fetch(query)
512
+ .then(response =&gt; response.text())
513
+ .then(txt =&gt; xml2js.parseStringPromise(txt))
514
+ }
515
+ &nbsp;
516
+ export async function DescribeCoverage (url, coverage) {
517
+ const query = makeDescribeCoverageQuery(url, coverage)
518
+ return fetch(query)
519
+ .then(response =&gt; response.text())
520
+ .then(txt =&gt; xml2js.parseStringPromise(txt))
521
+ }
522
+ &nbsp;
523
+ export async function GetCoverage (url, coverage, format, bbox, width, height, axisNames) {
524
+ const subsets = [
525
+ { axis: axisNames[0], low: bbox[0], high: bbox[2] }
526
+ , { axis: axisNames[1], low: bbox[1], high: bbox[3] } ]
527
+ const scaleSizes = [
528
+ { axis: axisNames[0], size: height }
529
+ , { axis: axisNames[1], size: width } ]
530
+ const query = makeGetCoverageQuery(url, coverage, format, subsets, scaleSizes)
531
+ return fetch(query)
532
+ .then(response =&gt; response.blob())
533
+ }
534
+ &nbsp;
535
+ export function GetSupportedFormats (capabilities) {
536
+ // 2.0.1
537
+ // wcs:Capabilities / wcs:ServiceMetadata / wcs:formatSupported
538
+ return _.get(capabilities, 'wcs:Capabilities.wcs:ServiceMetadata[0].wcs:formatSupported', null)
539
+ }
540
+ &nbsp;
541
+ export function GetOfferedCoverages (capabilities) {
542
+ // 2.0.1
543
+ // wcs:Capabilities / wcs:Contents / wcs:CoverageSummary / wcs:CoverageId
544
+ const summary = _.get(capabilities, 'wcs:Capabilities.wcs:Contents[0].wcs:CoverageSummary')
545
+ if (!summary)
546
+ return null
547
+ return summary.map(node =&gt; _.get(node, 'wcs:CoverageId[0]'))
548
+ }
549
+ &nbsp;
550
+ export function GetCoverageSpatialBounds (coverage) {
551
+ // 2.0.1
552
+ // wcs:CoverageDescriptions / gml:boundedBy / gml:Envelope
553
+ const envelope = _.get(coverage, 'wcs:CoverageDescriptions.wcs:CoverageDescription[0].gml:boundedBy[0].gml:Envelope[0]')
554
+ if (!envelope)
555
+ return null
556
+ // assume lat long &amp; deg &amp; srs = 4326
557
+ // TODO: check it
558
+ const lowerCorner = _.get(envelope, 'gml:lowerCorner[0]', null)
559
+ const upperCorner = _.get(envelope, 'gml:upperCorner[0]', null)
560
+ if (!lowerCorner || !upperCorner)
561
+ return null
562
+ const minLatLon = lowerCorner.split(' ').map(val =&gt; parseFloat(val))
563
+ const maxLatLon = upperCorner.split(' ').map(val =&gt; parseFloat(val))
564
+ return [minLatLon[0], minLatLon[1], maxLatLon[0], maxLatLon[1]]
565
+ }
566
+ */
567
567
  &nbsp;</pre></td></tr></table></pre>
568
568
 
569
569
  <div class='push'></div><!-- for sticky footer -->
@@ -571,7 +571,7 @@
571
571
  <div class='footer quiet pad2 space-top1 center small'>
572
572
  Code coverage generated by
573
573
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
574
- at 2025-02-18T09:52:45.605Z
574
+ at 2025-07-24T10:00:20.476Z
575
575
  </div>
576
576
  <script src="../../prettify.js"></script>
577
577
  <script>