@kalisio/kdk 2.5.1 → 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 (255) hide show
  1. package/core/api/hooks/hooks.authorisations.js +1 -2
  2. package/core/api/services/authorisations/authorisations.service.js +1 -3
  3. package/core/api/services/index.js +5 -1
  4. package/core/api/services/users/users.hooks.js +4 -3
  5. package/core/client/components/input/KShapePicker.vue +4 -4
  6. package/core/client/utils/index.js +1 -0
  7. package/coverage/core/api/application.js.html +344 -344
  8. package/coverage/core/api/authentication.js.html +79 -79
  9. package/coverage/core/api/db.js.html +167 -167
  10. package/coverage/core/api/hooks/hooks.authentication.js.html +12 -12
  11. package/coverage/core/api/hooks/hooks.authorisations.js.html +154 -157
  12. package/coverage/core/api/hooks/hooks.logger.js.html +18 -18
  13. package/coverage/core/api/hooks/hooks.model.js.html +275 -275
  14. package/coverage/core/api/hooks/hooks.push.js.html +34 -34
  15. package/coverage/core/api/hooks/hooks.query.js.html +89 -89
  16. package/coverage/core/api/hooks/hooks.schemas.js.html +13 -13
  17. package/coverage/core/api/hooks/hooks.service.js.html +28 -28
  18. package/coverage/core/api/hooks/hooks.storage.js.html +7 -7
  19. package/coverage/core/api/hooks/hooks.users.js.html +50 -50
  20. package/coverage/core/api/hooks/index.html +51 -51
  21. package/coverage/core/api/hooks/index.js.html +11 -11
  22. package/coverage/core/api/index.html +42 -42
  23. package/coverage/core/api/index.js.html +22 -22
  24. package/coverage/core/api/marshall.js.html +127 -127
  25. package/coverage/core/api/models/index.html +1 -1
  26. package/coverage/core/api/models/messages.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 +87 -93
  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/import-export/import-export.hooks.js.html +1 -1
  38. package/coverage/core/api/services/import-export/import-export.service.js.html +1 -1
  39. package/coverage/core/api/services/import-export/index.html +1 -1
  40. package/coverage/core/api/services/index.html +15 -15
  41. package/coverage/core/api/services/index.js.html +97 -85
  42. package/coverage/core/api/services/mailer/index.html +1 -1
  43. package/coverage/core/api/services/mailer/mailer.hooks.js.html +1 -1
  44. package/coverage/core/api/services/mailer/mailer.service.js.html +1 -1
  45. package/coverage/core/api/services/messages/index.html +1 -1
  46. package/coverage/core/api/services/messages/messages.hooks.js.html +1 -1
  47. package/coverage/core/api/services/push/index.html +1 -1
  48. package/coverage/core/api/services/push/push.hooks.js.html +1 -1
  49. package/coverage/core/api/services/push/push.service.js.html +1 -1
  50. package/coverage/core/api/services/storage/index.html +1 -1
  51. package/coverage/core/api/services/storage/storage.hooks.js.html +36 -36
  52. package/coverage/core/api/services/storage/storage.service.js.html +30 -30
  53. package/coverage/core/api/services/users/index.html +7 -7
  54. package/coverage/core/api/services/users/users.hooks.js.html +83 -80
  55. package/coverage/core/api/services/users/users.service.js.html +4 -4
  56. package/coverage/core/common/errors.js.html +2 -2
  57. package/coverage/core/common/index.html +30 -30
  58. package/coverage/core/common/index.js.html +11 -11
  59. package/coverage/core/common/permissions.js.html +187 -187
  60. package/coverage/core/common/schema.js.html +26 -26
  61. package/coverage/core/common/utils.js.html +61 -61
  62. package/coverage/core/common/utils.offline.js.html +6 -6
  63. package/coverage/index.html +173 -173
  64. package/coverage/lcov-report/core/api/application.js.html +344 -344
  65. package/coverage/lcov-report/core/api/authentication.js.html +79 -79
  66. package/coverage/lcov-report/core/api/db.js.html +167 -167
  67. package/coverage/lcov-report/core/api/hooks/hooks.authentication.js.html +12 -12
  68. package/coverage/lcov-report/core/api/hooks/hooks.authorisations.js.html +154 -157
  69. package/coverage/lcov-report/core/api/hooks/hooks.logger.js.html +18 -18
  70. package/coverage/lcov-report/core/api/hooks/hooks.model.js.html +275 -275
  71. package/coverage/lcov-report/core/api/hooks/hooks.push.js.html +34 -34
  72. package/coverage/lcov-report/core/api/hooks/hooks.query.js.html +89 -89
  73. package/coverage/lcov-report/core/api/hooks/hooks.schemas.js.html +13 -13
  74. package/coverage/lcov-report/core/api/hooks/hooks.service.js.html +28 -28
  75. package/coverage/lcov-report/core/api/hooks/hooks.storage.js.html +7 -7
  76. package/coverage/lcov-report/core/api/hooks/hooks.users.js.html +50 -50
  77. package/coverage/lcov-report/core/api/hooks/index.html +51 -51
  78. package/coverage/lcov-report/core/api/hooks/index.js.html +11 -11
  79. package/coverage/lcov-report/core/api/index.html +42 -42
  80. package/coverage/lcov-report/core/api/index.js.html +22 -22
  81. package/coverage/lcov-report/core/api/marshall.js.html +127 -127
  82. package/coverage/lcov-report/core/api/models/index.html +1 -1
  83. package/coverage/lcov-report/core/api/models/messages.model.mongodb.js.html +1 -1
  84. package/coverage/lcov-report/core/api/models/users.model.mongodb.js.html +11 -11
  85. package/coverage/lcov-report/core/api/services/account/account.hooks.js.html +42 -42
  86. package/coverage/lcov-report/core/api/services/account/account.service.js.html +34 -34
  87. package/coverage/lcov-report/core/api/services/account/index.html +1 -1
  88. package/coverage/lcov-report/core/api/services/authorisations/authorisations.hooks.js.html +34 -34
  89. package/coverage/lcov-report/core/api/services/authorisations/authorisations.service.js.html +87 -93
  90. package/coverage/lcov-report/core/api/services/authorisations/index.html +19 -19
  91. package/coverage/lcov-report/core/api/services/databases/databases.hooks.js.html +1 -1
  92. package/coverage/lcov-report/core/api/services/databases/databases.service.js.html +1 -1
  93. package/coverage/lcov-report/core/api/services/databases/index.html +1 -1
  94. package/coverage/lcov-report/core/api/services/import-export/import-export.hooks.js.html +1 -1
  95. package/coverage/lcov-report/core/api/services/import-export/import-export.service.js.html +1 -1
  96. package/coverage/lcov-report/core/api/services/import-export/index.html +1 -1
  97. package/coverage/lcov-report/core/api/services/index.html +15 -15
  98. package/coverage/lcov-report/core/api/services/index.js.html +97 -85
  99. package/coverage/lcov-report/core/api/services/mailer/index.html +1 -1
  100. package/coverage/lcov-report/core/api/services/mailer/mailer.hooks.js.html +1 -1
  101. package/coverage/lcov-report/core/api/services/mailer/mailer.service.js.html +1 -1
  102. package/coverage/lcov-report/core/api/services/messages/index.html +1 -1
  103. package/coverage/lcov-report/core/api/services/messages/messages.hooks.js.html +1 -1
  104. package/coverage/lcov-report/core/api/services/push/index.html +1 -1
  105. package/coverage/lcov-report/core/api/services/push/push.hooks.js.html +1 -1
  106. package/coverage/lcov-report/core/api/services/push/push.service.js.html +1 -1
  107. package/coverage/lcov-report/core/api/services/storage/index.html +1 -1
  108. package/coverage/lcov-report/core/api/services/storage/storage.hooks.js.html +36 -36
  109. package/coverage/lcov-report/core/api/services/storage/storage.service.js.html +30 -30
  110. package/coverage/lcov-report/core/api/services/users/index.html +7 -7
  111. package/coverage/lcov-report/core/api/services/users/users.hooks.js.html +83 -80
  112. package/coverage/lcov-report/core/api/services/users/users.service.js.html +4 -4
  113. package/coverage/lcov-report/core/common/errors.js.html +2 -2
  114. package/coverage/lcov-report/core/common/index.html +30 -30
  115. package/coverage/lcov-report/core/common/index.js.html +11 -11
  116. package/coverage/lcov-report/core/common/permissions.js.html +187 -187
  117. package/coverage/lcov-report/core/common/schema.js.html +26 -26
  118. package/coverage/lcov-report/core/common/utils.js.html +61 -61
  119. package/coverage/lcov-report/core/common/utils.offline.js.html +6 -6
  120. package/coverage/lcov-report/index.html +173 -173
  121. package/coverage/lcov-report/map/api/hooks/hooks.catalog.js.html +316 -316
  122. package/coverage/lcov-report/map/api/hooks/hooks.features.js.html +218 -218
  123. package/coverage/lcov-report/map/api/hooks/hooks.query.js.html +798 -789
  124. package/coverage/lcov-report/map/api/hooks/index.html +54 -54
  125. package/coverage/lcov-report/map/api/hooks/index.js.html +16 -16
  126. package/coverage/lcov-report/map/api/index.html +32 -32
  127. package/coverage/lcov-report/map/api/index.js.html +46 -46
  128. package/coverage/lcov-report/map/api/marshall.js.html +72 -72
  129. package/coverage/lcov-report/map/api/models/alerts.model.mongodb.js.html +24 -24
  130. package/coverage/lcov-report/map/api/models/catalog.model.mongodb.js.html +44 -44
  131. package/coverage/lcov-report/map/api/models/features.model.mongodb.js.html +80 -80
  132. package/coverage/lcov-report/map/api/models/index.html +65 -65
  133. package/coverage/lcov-report/map/api/models/projects.model.mongodb.js.html +26 -26
  134. package/coverage/lcov-report/map/api/models/styles.model.mongodb.js.html +28 -28
  135. package/coverage/lcov-report/map/api/services/alerts/alerts.hooks.js.html +136 -136
  136. package/coverage/lcov-report/map/api/services/alerts/alerts.service.js.html +343 -343
  137. package/coverage/lcov-report/map/api/services/alerts/index.html +32 -32
  138. package/coverage/lcov-report/map/api/services/catalog/catalog.hooks.js.html +172 -172
  139. package/coverage/lcov-report/map/api/services/catalog/index.html +21 -21
  140. package/coverage/lcov-report/map/api/services/daptiles/daptiles.service.js.html +1 -1
  141. package/coverage/lcov-report/map/api/services/daptiles/index.html +1 -1
  142. package/coverage/lcov-report/map/api/services/features/features.hooks.js.html +160 -160
  143. package/coverage/lcov-report/map/api/services/features/features.service.js.html +117 -117
  144. package/coverage/lcov-report/map/api/services/features/index.html +31 -31
  145. package/coverage/lcov-report/map/api/services/index.html +21 -21
  146. package/coverage/lcov-report/map/api/services/index.js.html +334 -334
  147. package/coverage/lcov-report/map/api/services/projects/index.html +21 -21
  148. package/coverage/lcov-report/map/api/services/projects/projects.hooks.js.html +237 -237
  149. package/coverage/lcov-report/map/api/services/styles/index.html +21 -21
  150. package/coverage/lcov-report/map/api/services/styles/styles.hooks.js.html +84 -84
  151. package/coverage/lcov-report/map/common/dynamic-grid-source.js.html +68 -68
  152. package/coverage/lcov-report/map/common/errors.js.html +16 -16
  153. package/coverage/lcov-report/map/common/geotiff-grid-source.js.html +267 -267
  154. package/coverage/lcov-report/map/common/grid.js.html +554 -554
  155. package/coverage/lcov-report/map/common/index.html +159 -159
  156. package/coverage/lcov-report/map/common/index.js.html +68 -68
  157. package/coverage/lcov-report/map/common/meteo-model-grid-source.js.html +73 -73
  158. package/coverage/lcov-report/map/common/moment-utils.js.html +18 -18
  159. package/coverage/lcov-report/map/common/opendap-grid-source.js.html +484 -484
  160. package/coverage/lcov-report/map/common/opendap-utils.js.html +353 -353
  161. package/coverage/lcov-report/map/common/permissions.js.html +40 -40
  162. package/coverage/lcov-report/map/common/time-based-grid-source.js.html +59 -59
  163. package/coverage/lcov-report/map/common/tms-utils.js.html +1 -1
  164. package/coverage/lcov-report/map/common/wcs-grid-source.js.html +190 -190
  165. package/coverage/lcov-report/map/common/wcs-utils.js.html +338 -338
  166. package/coverage/lcov-report/map/common/weacast-grid-source.js.html +345 -345
  167. package/coverage/lcov-report/map/common/wfs-utils.js.html +1 -1
  168. package/coverage/lcov-report/map/common/wms-utils.js.html +1 -1
  169. package/coverage/lcov-report/map/common/wmts-utils.js.html +1 -1
  170. package/coverage/lcov.info +6880 -5908
  171. package/coverage/map/api/hooks/hooks.catalog.js.html +316 -316
  172. package/coverage/map/api/hooks/hooks.features.js.html +218 -218
  173. package/coverage/map/api/hooks/hooks.query.js.html +798 -789
  174. package/coverage/map/api/hooks/index.html +54 -54
  175. package/coverage/map/api/hooks/index.js.html +16 -16
  176. package/coverage/map/api/index.html +32 -32
  177. package/coverage/map/api/index.js.html +46 -46
  178. package/coverage/map/api/marshall.js.html +72 -72
  179. package/coverage/map/api/models/alerts.model.mongodb.js.html +24 -24
  180. package/coverage/map/api/models/catalog.model.mongodb.js.html +44 -44
  181. package/coverage/map/api/models/features.model.mongodb.js.html +80 -80
  182. package/coverage/map/api/models/index.html +65 -65
  183. package/coverage/map/api/models/projects.model.mongodb.js.html +26 -26
  184. package/coverage/map/api/models/styles.model.mongodb.js.html +28 -28
  185. package/coverage/map/api/services/alerts/alerts.hooks.js.html +136 -136
  186. package/coverage/map/api/services/alerts/alerts.service.js.html +343 -343
  187. package/coverage/map/api/services/alerts/index.html +32 -32
  188. package/coverage/map/api/services/catalog/catalog.hooks.js.html +172 -172
  189. package/coverage/map/api/services/catalog/index.html +21 -21
  190. package/coverage/map/api/services/daptiles/daptiles.service.js.html +1 -1
  191. package/coverage/map/api/services/daptiles/index.html +1 -1
  192. package/coverage/map/api/services/features/features.hooks.js.html +160 -160
  193. package/coverage/map/api/services/features/features.service.js.html +117 -117
  194. package/coverage/map/api/services/features/index.html +31 -31
  195. package/coverage/map/api/services/index.html +21 -21
  196. package/coverage/map/api/services/index.js.html +334 -334
  197. package/coverage/map/api/services/projects/index.html +21 -21
  198. package/coverage/map/api/services/projects/projects.hooks.js.html +237 -237
  199. package/coverage/map/api/services/styles/index.html +21 -21
  200. package/coverage/map/api/services/styles/styles.hooks.js.html +84 -84
  201. package/coverage/map/common/dynamic-grid-source.js.html +68 -68
  202. package/coverage/map/common/errors.js.html +16 -16
  203. package/coverage/map/common/geotiff-grid-source.js.html +267 -267
  204. package/coverage/map/common/grid.js.html +554 -554
  205. package/coverage/map/common/index.html +159 -159
  206. package/coverage/map/common/index.js.html +68 -68
  207. package/coverage/map/common/meteo-model-grid-source.js.html +73 -73
  208. package/coverage/map/common/moment-utils.js.html +18 -18
  209. package/coverage/map/common/opendap-grid-source.js.html +484 -484
  210. package/coverage/map/common/opendap-utils.js.html +353 -353
  211. package/coverage/map/common/permissions.js.html +40 -40
  212. package/coverage/map/common/time-based-grid-source.js.html +59 -59
  213. package/coverage/map/common/tms-utils.js.html +1 -1
  214. package/coverage/map/common/wcs-grid-source.js.html +190 -190
  215. package/coverage/map/common/wcs-utils.js.html +338 -338
  216. package/coverage/map/common/weacast-grid-source.js.html +345 -345
  217. package/coverage/map/common/wfs-utils.js.html +1 -1
  218. package/coverage/map/common/wms-utils.js.html +1 -1
  219. package/coverage/map/common/wmts-utils.js.html +1 -1
  220. package/coverage/tmp/coverage-151198-1753351220086-0.json +1 -0
  221. package/coverage/tmp/coverage-151210-1753351220070-0.json +1 -0
  222. package/coverage/tmp/coverage-151221-1753351129816-0.json +1 -0
  223. package/coverage/tmp/coverage-151233-1753351129803-0.json +1 -0
  224. package/coverage/tmp/coverage-151240-1753351129770-0.json +1 -0
  225. package/coverage/tmp/coverage-151307-1753351220058-0.json +1 -0
  226. package/coverage/tmp/coverage-151319-1753351220044-0.json +1 -0
  227. package/coverage/tmp/coverage-151326-1753351220010-0.json +1 -0
  228. package/map/api/hooks/hooks.query.js +7 -4
  229. package/map/api/services/styles/styles.hooks.js +1 -1
  230. package/map/client/components/KLayerEditor.vue +4 -0
  231. package/map/client/components/catalog/KLayerCategories.vue +2 -0
  232. package/map/client/components/stickies/KAttribution.vue +8 -7
  233. package/map/client/components/stickies/KLevelSlider.vue +10 -8
  234. package/map/client/components/styles/KStyleEditor.vue +1 -1
  235. package/map/client/components/styles/KStyleManager.vue +7 -1
  236. package/map/client/composables/highlight.js +5 -1
  237. package/map/client/i18n/map_en.json +4 -1
  238. package/map/client/i18n/map_fr.json +5 -2
  239. package/map/client/leaflet/utils/utils.geojson.js +5 -4
  240. package/map/client/mixins/globe/mixin.geojson-layers.js +11 -5
  241. package/map/client/mixins/mixin.activity.js +9 -0
  242. package/map/client/utils/utils.layers.js +0 -2
  243. package/package.json +1 -1
  244. package/test/api/core/index.test.js +49 -60
  245. package/test/api/core/push.test.js +1 -1
  246. package/test/api/core/test-log-2025-06-25.log +9 -0
  247. package/test/api/core/test-log-2025-07-24.log +44 -0
  248. package/test/api/map/test-log-2025-05-27.log +13 -0
  249. package/test/api/map/test-log-2025-06-23.log +7 -0
  250. package/test/api/map/test-log-2025-07-24.log +11 -0
  251. package/coverage/tmp/coverage-323534-1747828879483-0.json +0 -1
  252. package/coverage/tmp/coverage-323546-1747828879453-0.json +0 -1
  253. package/coverage/tmp/coverage-323557-1747828879439-0.json +0 -1
  254. package/coverage/tmp/coverage-323569-1747828879416-0.json +0 -1
  255. package/coverage/tmp/coverage-323576-1747828879390-0.json +0 -1
@@ -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, headers = {}) {</span>
408
- <span class="cstat-no" title="statement not covered" > return fetch(query, { redirect: 'follow', headers })</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 = {}, headers = {}) {</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
418
  <span class="cstat-no" title="statement not covered" > return fetchAsJson(query, headers)</span>
419
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 = {}, headers = {}) {</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, headers)</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 = {}, headers = {}) {</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, headers })</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>
467
- <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-05-21T12:01:19.833Z
574
+ at 2025-07-24T10:00:20.508Z
575
575
  </div>
576
576
  <script src="../../prettify.js"></script>
577
577
  <script>