@kalisio/kdk 2.6.4 → 2.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (398) hide show
  1. package/core/api/application.js +2 -4
  2. package/core/api/authentication.js +2 -3
  3. package/core/api/db.js +10 -2
  4. package/core/api/hooks/hooks.authorisations.js +4 -2
  5. package/core/api/hooks/hooks.push.js +6 -2
  6. package/core/api/hooks/hooks.query.js +29 -12
  7. package/core/api/hooks/hooks.users.js +30 -17
  8. package/core/api/models/configurations.model.mongodb.js +4 -0
  9. package/core/api/services/authorisations/authorisations.service.js +1 -1
  10. package/core/api/services/configurations/configurations.hooks.js +33 -0
  11. package/core/api/services/index.js +41 -7
  12. package/core/api/services/messages/messages.hooks.js +9 -3
  13. package/core/client/api.js +14 -1
  14. package/core/client/capabilities.js +1 -6
  15. package/core/client/components/KAvatar.vue +24 -20
  16. package/core/client/components/account/KProfile.vue +10 -71
  17. package/core/client/components/account/index.js +0 -2
  18. package/core/client/components/app/KSettings.vue +1 -0
  19. package/core/client/components/collection/KBoard.vue +4 -3
  20. package/core/client/components/collection/KCardSection.vue +1 -0
  21. package/core/client/components/collection/KGrid.vue +2 -0
  22. package/core/client/components/collection/KTable.vue +5 -1
  23. package/core/client/components/collection/KTimeLine.vue +9 -1
  24. package/core/client/components/collection/index.js +0 -2
  25. package/core/client/components/form/KChipsField.vue +2 -1
  26. package/core/client/components/form/KEmailField.vue +1 -0
  27. package/core/client/components/form/KFileField.vue +22 -1
  28. package/core/client/components/form/KForm.vue +2 -0
  29. package/core/client/components/form/KItemField.vue +1 -0
  30. package/core/client/components/form/KNumberField.vue +1 -0
  31. package/core/client/components/form/KPasswordField.vue +1 -0
  32. package/core/client/components/form/KPhoneField.vue +1 -0
  33. package/core/client/components/form/KPropertyItemField.vue +1 -0
  34. package/core/client/components/form/KResolutionField.vue +1 -0
  35. package/core/client/components/form/KSelectField.vue +31 -0
  36. package/core/client/components/form/KTagField.vue +1 -0
  37. package/core/client/components/form/KTextField.vue +1 -0
  38. package/core/client/components/form/KTokenField.vue +1 -0
  39. package/core/client/components/form/KUnitField.vue +1 -0
  40. package/core/client/components/form/KUrlField.vue +1 -0
  41. package/core/client/components/graphics/KIcon.vue +3 -4
  42. package/core/client/components/layout/KPage.vue +1 -0
  43. package/core/client/components/layout/KWindow.vue +6 -3
  44. package/core/client/components/messages/KMessageComposer.vue +2 -1
  45. package/core/client/components/messages/KMessagesTimeLine.vue +1 -1
  46. package/core/client/components/time/KDate.vue +1 -2
  47. package/core/client/components/time/KDateTime.vue +11 -11
  48. package/core/client/components/time/KTime.vue +1 -1
  49. package/core/client/composables/collection.js +33 -8
  50. package/core/client/composables/errors.js +1 -1
  51. package/core/client/composables/layout.js +9 -9
  52. package/core/client/configurations.js +50 -0
  53. package/core/client/exporter.js +1 -1
  54. package/core/client/i18n/core_en.json +6 -39
  55. package/core/client/i18n/core_fr.json +6 -39
  56. package/core/client/index.js +2 -0
  57. package/core/client/layout.js +8 -8
  58. package/core/client/mixins/mixin.base-activity.js +5 -2
  59. package/core/client/mixins/mixin.base-field.js +3 -3
  60. package/core/client/search.js +2 -1
  61. package/core/client/utils/utils.collection.js +8 -8
  62. package/core/client/utils/utils.items.js +4 -0
  63. package/core/client/utils/utils.push.js +3 -3
  64. package/core/client/utils/utils.session.js +7 -5
  65. package/core/client/utils/utils.shapes.js +38 -7
  66. package/core/client/utils/utils.time.js +21 -22
  67. package/core/common/schemas/users.update-profile.json +3 -2
  68. package/coverage/core/api/application.js.html +392 -398
  69. package/coverage/core/api/authentication.js.html +352 -187
  70. package/coverage/core/api/db.js.html +165 -126
  71. package/coverage/core/api/hooks/hooks.authentication.js.html +22 -196
  72. package/coverage/core/api/hooks/hooks.authorisations.js.html +383 -662
  73. package/coverage/core/api/hooks/hooks.logger.js.html +41 -41
  74. package/coverage/core/api/hooks/hooks.model.js.html +113 -101
  75. package/coverage/core/api/hooks/hooks.push.js.html +124 -97
  76. package/coverage/core/api/hooks/hooks.query.js.html +292 -217
  77. package/coverage/core/api/hooks/hooks.schemas.js.html +123 -123
  78. package/coverage/core/api/hooks/hooks.service.js.html +1 -1
  79. package/coverage/core/api/hooks/hooks.storage.js.html +1 -1
  80. package/coverage/core/api/hooks/{hooks.groups.js.html → hooks.tags.js.html} +100 -76
  81. package/coverage/core/api/hooks/hooks.users.js.html +255 -447
  82. package/coverage/core/api/hooks/index.html +107 -122
  83. package/coverage/core/api/hooks/index.js.html +4 -10
  84. package/coverage/core/api/index.html +46 -61
  85. package/coverage/core/api/index.js.html +9 -9
  86. package/coverage/core/api/marshall.js.html +9 -9
  87. package/coverage/core/api/models/{organisations.model.mongodb.js.html → configurations.model.mongodb.js.html} +10 -7
  88. package/coverage/core/api/models/index.html +35 -50
  89. package/coverage/core/api/models/messages.model.mongodb.js.html +39 -27
  90. package/coverage/core/api/models/tags.model.mongodb.js.html +26 -32
  91. package/coverage/core/api/models/users.model.mongodb.js.html +10 -10
  92. package/coverage/core/api/services/account/account.hooks.js.html +5 -5
  93. package/coverage/core/api/services/account/account.service.js.html +127 -127
  94. package/coverage/core/api/services/account/index.html +22 -22
  95. package/coverage/core/api/services/authorisations/authorisations.hooks.js.html +1 -1
  96. package/coverage/core/api/services/authorisations/authorisations.service.js.html +213 -222
  97. package/coverage/core/api/services/authorisations/index.html +21 -21
  98. package/coverage/core/api/services/{organisations/organisations.hooks.js.html → configurations/configurations.hooks.js.html} +16 -10
  99. package/coverage/core/api/services/{groups → configurations}/index.html +8 -8
  100. package/coverage/core/api/services/databases/databases.hooks.js.html +1 -1
  101. package/coverage/core/api/services/databases/databases.service.js.html +1 -1
  102. package/coverage/core/api/services/databases/index.html +1 -1
  103. package/coverage/core/api/services/import-export/import-export.hooks.js.html +76 -76
  104. package/coverage/core/api/services/import-export/import-export.service.js.html +32 -32
  105. package/coverage/core/api/services/import-export/index.html +32 -32
  106. package/coverage/core/api/services/index.html +21 -21
  107. package/coverage/core/api/services/index.js.html +313 -142
  108. package/coverage/core/api/services/mailer/index.html +32 -32
  109. package/coverage/core/api/services/mailer/mailer.hooks.js.html +80 -80
  110. package/coverage/core/api/services/mailer/mailer.service.js.html +32 -32
  111. package/coverage/core/api/services/messages/index.html +21 -21
  112. package/coverage/core/api/services/messages/messages.hooks.js.html +112 -76
  113. package/coverage/core/api/services/push/index.html +32 -32
  114. package/coverage/core/api/services/push/push.hooks.js.html +80 -80
  115. package/coverage/core/api/services/push/push.service.js.html +34 -34
  116. package/coverage/core/api/services/storage/index.html +29 -29
  117. package/coverage/core/api/services/storage/storage.hooks.js.html +80 -80
  118. package/coverage/core/api/services/storage/storage.service.js.html +29 -29
  119. package/coverage/core/api/services/tags/index.html +21 -21
  120. package/coverage/core/api/services/tags/tags.hooks.js.html +119 -71
  121. package/coverage/core/api/services/users/index.html +27 -12
  122. package/coverage/core/api/services/users/users.hooks.js.html +14 -11
  123. package/coverage/core/api/services/users/users.service.js.html +100 -0
  124. package/coverage/core/common/errors.js.html +1 -1
  125. package/coverage/core/common/index.html +42 -27
  126. package/coverage/core/common/index.js.html +1 -1
  127. package/coverage/core/common/permissions.js.html +166 -472
  128. package/coverage/core/common/schema.js.html +4 -4
  129. package/coverage/core/common/utils.js.html +31 -25
  130. package/coverage/core/common/utils.offline.js.html +199 -0
  131. package/coverage/index.html +192 -192
  132. package/coverage/lcov-report/core/api/application.js.html +392 -398
  133. package/coverage/lcov-report/core/api/authentication.js.html +352 -187
  134. package/coverage/lcov-report/core/api/db.js.html +165 -126
  135. package/coverage/lcov-report/core/api/hooks/hooks.authentication.js.html +22 -196
  136. package/coverage/lcov-report/core/api/hooks/hooks.authorisations.js.html +383 -662
  137. package/coverage/lcov-report/core/api/hooks/hooks.logger.js.html +41 -41
  138. package/coverage/lcov-report/core/api/hooks/hooks.model.js.html +113 -101
  139. package/coverage/lcov-report/core/api/hooks/hooks.push.js.html +124 -97
  140. package/coverage/lcov-report/core/api/hooks/hooks.query.js.html +292 -217
  141. package/coverage/lcov-report/core/api/hooks/hooks.schemas.js.html +123 -123
  142. package/coverage/lcov-report/core/api/hooks/hooks.service.js.html +1 -1
  143. package/coverage/lcov-report/core/api/hooks/hooks.storage.js.html +1 -1
  144. package/coverage/lcov-report/core/api/hooks/{hooks.groups.js.html → hooks.tags.js.html} +100 -76
  145. package/coverage/lcov-report/core/api/hooks/hooks.users.js.html +255 -447
  146. package/coverage/lcov-report/core/api/hooks/index.html +107 -122
  147. package/coverage/lcov-report/core/api/hooks/index.js.html +4 -10
  148. package/coverage/lcov-report/core/api/index.html +46 -61
  149. package/coverage/lcov-report/core/api/index.js.html +9 -9
  150. package/coverage/lcov-report/core/api/marshall.js.html +9 -9
  151. package/coverage/lcov-report/core/api/models/{organisations.model.mongodb.js.html → configurations.model.mongodb.js.html} +10 -7
  152. package/coverage/lcov-report/core/api/models/index.html +35 -50
  153. package/coverage/lcov-report/core/api/models/messages.model.mongodb.js.html +39 -27
  154. package/coverage/lcov-report/core/api/models/tags.model.mongodb.js.html +26 -32
  155. package/coverage/lcov-report/core/api/models/users.model.mongodb.js.html +10 -10
  156. package/coverage/lcov-report/core/api/services/account/account.hooks.js.html +5 -5
  157. package/coverage/lcov-report/core/api/services/account/account.service.js.html +127 -127
  158. package/coverage/lcov-report/core/api/services/account/index.html +22 -22
  159. package/coverage/lcov-report/core/api/services/authorisations/authorisations.hooks.js.html +1 -1
  160. package/coverage/lcov-report/core/api/services/authorisations/authorisations.service.js.html +213 -222
  161. package/coverage/lcov-report/core/api/services/authorisations/index.html +21 -21
  162. package/coverage/lcov-report/core/api/services/{groups/groups.hooks.js.html → configurations/configurations.hooks.js.html} +16 -10
  163. package/coverage/lcov-report/core/api/services/{groups → configurations}/index.html +8 -8
  164. package/coverage/lcov-report/core/api/services/databases/databases.hooks.js.html +1 -1
  165. package/coverage/lcov-report/core/api/services/databases/databases.service.js.html +1 -1
  166. package/coverage/lcov-report/core/api/services/databases/index.html +1 -1
  167. package/coverage/lcov-report/core/api/services/import-export/import-export.hooks.js.html +76 -76
  168. package/coverage/lcov-report/core/api/services/import-export/import-export.service.js.html +32 -32
  169. package/coverage/lcov-report/core/api/services/import-export/index.html +32 -32
  170. package/coverage/lcov-report/core/api/services/index.html +21 -21
  171. package/coverage/lcov-report/core/api/services/index.js.html +313 -142
  172. package/coverage/lcov-report/core/api/services/mailer/index.html +32 -32
  173. package/coverage/lcov-report/core/api/services/mailer/mailer.hooks.js.html +80 -80
  174. package/coverage/lcov-report/core/api/services/mailer/mailer.service.js.html +32 -32
  175. package/coverage/lcov-report/core/api/services/messages/index.html +21 -21
  176. package/coverage/lcov-report/core/api/services/messages/messages.hooks.js.html +112 -76
  177. package/coverage/lcov-report/core/api/services/push/index.html +32 -32
  178. package/coverage/lcov-report/core/api/services/push/push.hooks.js.html +80 -80
  179. package/coverage/lcov-report/core/api/services/push/push.service.js.html +34 -34
  180. package/coverage/lcov-report/core/api/services/storage/index.html +29 -29
  181. package/coverage/lcov-report/core/api/services/storage/storage.hooks.js.html +80 -80
  182. package/coverage/lcov-report/core/api/services/storage/storage.service.js.html +29 -29
  183. package/coverage/lcov-report/core/api/services/tags/index.html +21 -21
  184. package/coverage/lcov-report/core/api/services/tags/tags.hooks.js.html +119 -71
  185. package/coverage/lcov-report/core/api/services/users/index.html +27 -12
  186. package/coverage/lcov-report/core/api/services/users/users.hooks.js.html +14 -11
  187. package/coverage/lcov-report/core/api/services/users/users.service.js.html +100 -0
  188. package/coverage/lcov-report/core/common/errors.js.html +1 -1
  189. package/coverage/lcov-report/core/common/index.html +42 -27
  190. package/coverage/lcov-report/core/common/index.js.html +1 -1
  191. package/coverage/lcov-report/core/common/permissions.js.html +166 -472
  192. package/coverage/lcov-report/core/common/schema.js.html +4 -4
  193. package/coverage/lcov-report/core/common/utils.js.html +31 -25
  194. package/coverage/lcov-report/core/common/utils.offline.js.html +199 -0
  195. package/coverage/lcov-report/index.html +192 -192
  196. package/coverage/lcov-report/map/api/hooks/hooks.catalog.js.html +169 -31
  197. package/coverage/lcov-report/map/api/hooks/hooks.features.js.html +1 -1
  198. package/coverage/lcov-report/map/api/hooks/hooks.query.js.html +215 -35
  199. package/coverage/lcov-report/map/api/hooks/index.html +7 -7
  200. package/coverage/lcov-report/map/api/hooks/index.js.html +1 -1
  201. package/coverage/lcov-report/map/api/index.html +1 -1
  202. package/coverage/lcov-report/map/api/index.js.html +1 -1
  203. package/coverage/lcov-report/map/api/marshall.js.html +1 -1
  204. package/coverage/lcov-report/map/api/models/alerts.model.mongodb.js.html +1 -1
  205. package/coverage/lcov-report/map/api/models/catalog.model.mongodb.js.html +82 -7
  206. package/coverage/lcov-report/map/api/models/features.model.mongodb.js.html +1 -1
  207. package/coverage/lcov-report/map/api/models/index.html +22 -7
  208. package/coverage/lcov-report/map/api/models/projects.model.mongodb.js.html +1 -1
  209. package/coverage/lcov-report/{core/api/models/groups.model.mongodb.js.html → map/api/models/styles.model.mongodb.js.html} +10 -7
  210. package/coverage/lcov-report/map/api/services/alerts/alerts.hooks.js.html +1 -1
  211. package/coverage/lcov-report/map/api/services/alerts/alerts.service.js.html +1 -1
  212. package/coverage/lcov-report/map/api/services/alerts/index.html +1 -1
  213. package/coverage/lcov-report/map/api/services/catalog/catalog.hooks.js.html +39 -12
  214. package/coverage/lcov-report/map/api/services/catalog/index.html +5 -5
  215. package/coverage/lcov-report/map/api/services/daptiles/daptiles.service.js.html +1 -1
  216. package/coverage/lcov-report/map/api/services/daptiles/index.html +1 -1
  217. package/coverage/lcov-report/map/api/services/features/features.hooks.js.html +86 -11
  218. package/coverage/lcov-report/map/api/services/features/features.service.js.html +307 -4
  219. package/coverage/lcov-report/map/api/services/features/index.html +7 -7
  220. package/coverage/lcov-report/map/api/services/index.html +5 -5
  221. package/coverage/lcov-report/map/api/services/index.js.html +326 -50
  222. package/coverage/lcov-report/map/api/services/projects/index.html +1 -1
  223. package/coverage/lcov-report/map/api/services/projects/projects.hooks.js.html +1 -1
  224. package/coverage/{core/api/services/organisations → lcov-report/map/api/services/styles}/index.html +10 -25
  225. package/coverage/lcov-report/{core/api/services/organisations/organisations.hooks.js.html → map/api/services/styles/styles.hooks.js.html} +45 -12
  226. package/coverage/lcov-report/map/common/dynamic-grid-source.js.html +1 -1
  227. package/coverage/lcov-report/map/common/errors.js.html +1 -1
  228. package/coverage/lcov-report/map/common/geotiff-grid-source.js.html +7 -10
  229. package/coverage/lcov-report/map/common/grid.js.html +1 -1
  230. package/coverage/lcov-report/map/common/index.html +19 -19
  231. package/coverage/lcov-report/map/common/index.js.html +1 -1
  232. package/coverage/lcov-report/map/common/meteo-model-grid-source.js.html +1 -1
  233. package/coverage/lcov-report/map/common/moment-utils.js.html +1 -1
  234. package/coverage/lcov-report/map/common/opendap-grid-source.js.html +1 -1
  235. package/coverage/lcov-report/map/common/opendap-utils.js.html +4 -7
  236. package/coverage/lcov-report/map/common/permissions.js.html +10 -4
  237. package/coverage/lcov-report/map/common/time-based-grid-source.js.html +1 -1
  238. package/coverage/lcov-report/map/common/tms-utils.js.html +9 -12
  239. package/coverage/lcov-report/map/common/wcs-grid-source.js.html +3 -3
  240. package/coverage/lcov-report/map/common/wcs-utils.js.html +12 -15
  241. package/coverage/lcov-report/map/common/weacast-grid-source.js.html +2 -2
  242. package/coverage/lcov-report/map/common/wfs-utils.js.html +14 -17
  243. package/coverage/lcov-report/map/common/wms-utils.js.html +30 -12
  244. package/coverage/lcov-report/map/common/wmts-utils.js.html +10 -13
  245. package/coverage/lcov.info +4157 -3816
  246. package/coverage/map/api/hooks/hooks.catalog.js.html +169 -31
  247. package/coverage/map/api/hooks/hooks.features.js.html +1 -1
  248. package/coverage/map/api/hooks/hooks.query.js.html +215 -35
  249. package/coverage/map/api/hooks/index.html +7 -7
  250. package/coverage/map/api/hooks/index.js.html +1 -1
  251. package/coverage/map/api/index.html +1 -1
  252. package/coverage/map/api/index.js.html +1 -1
  253. package/coverage/map/api/marshall.js.html +1 -1
  254. package/coverage/map/api/models/alerts.model.mongodb.js.html +1 -1
  255. package/coverage/map/api/models/catalog.model.mongodb.js.html +82 -7
  256. package/coverage/map/api/models/features.model.mongodb.js.html +1 -1
  257. package/coverage/map/api/models/index.html +22 -7
  258. package/coverage/map/api/models/projects.model.mongodb.js.html +1 -1
  259. package/coverage/{core/api/models/groups.model.mongodb.js.html → map/api/models/styles.model.mongodb.js.html} +10 -7
  260. package/coverage/map/api/services/alerts/alerts.hooks.js.html +1 -1
  261. package/coverage/map/api/services/alerts/alerts.service.js.html +1 -1
  262. package/coverage/map/api/services/alerts/index.html +1 -1
  263. package/coverage/map/api/services/catalog/catalog.hooks.js.html +39 -12
  264. package/coverage/map/api/services/catalog/index.html +5 -5
  265. package/coverage/map/api/services/daptiles/daptiles.service.js.html +1 -1
  266. package/coverage/map/api/services/daptiles/index.html +1 -1
  267. package/coverage/map/api/services/features/features.hooks.js.html +86 -11
  268. package/coverage/map/api/services/features/features.service.js.html +307 -4
  269. package/coverage/map/api/services/features/index.html +7 -7
  270. package/coverage/map/api/services/index.html +5 -5
  271. package/coverage/map/api/services/index.js.html +326 -50
  272. package/coverage/map/api/services/projects/index.html +1 -1
  273. package/coverage/map/api/services/projects/projects.hooks.js.html +1 -1
  274. package/coverage/{lcov-report/core/api/services/organisations → map/api/services/styles}/index.html +10 -25
  275. package/coverage/{core/api/services/groups/groups.hooks.js.html → map/api/services/styles/styles.hooks.js.html} +45 -12
  276. package/coverage/map/common/dynamic-grid-source.js.html +1 -1
  277. package/coverage/map/common/errors.js.html +1 -1
  278. package/coverage/map/common/geotiff-grid-source.js.html +7 -10
  279. package/coverage/map/common/grid.js.html +1 -1
  280. package/coverage/map/common/index.html +19 -19
  281. package/coverage/map/common/index.js.html +1 -1
  282. package/coverage/map/common/meteo-model-grid-source.js.html +1 -1
  283. package/coverage/map/common/moment-utils.js.html +1 -1
  284. package/coverage/map/common/opendap-grid-source.js.html +1 -1
  285. package/coverage/map/common/opendap-utils.js.html +4 -7
  286. package/coverage/map/common/permissions.js.html +10 -4
  287. package/coverage/map/common/time-based-grid-source.js.html +1 -1
  288. package/coverage/map/common/tms-utils.js.html +9 -12
  289. package/coverage/map/common/wcs-grid-source.js.html +3 -3
  290. package/coverage/map/common/wcs-utils.js.html +12 -15
  291. package/coverage/map/common/weacast-grid-source.js.html +2 -2
  292. package/coverage/map/common/wfs-utils.js.html +14 -17
  293. package/coverage/map/common/wms-utils.js.html +30 -12
  294. package/coverage/map/common/wmts-utils.js.html +10 -13
  295. package/coverage/tmp/coverage-1028514-1773134124472-0.json +1 -0
  296. package/coverage/tmp/coverage-1028526-1773134124448-0.json +1 -0
  297. package/coverage/tmp/coverage-1028537-1773134124431-0.json +1 -0
  298. package/coverage/tmp/coverage-1028549-1773134124401-0.json +1 -0
  299. package/coverage/tmp/coverage-1028556-1773134124353-0.json +1 -0
  300. package/extras/configs/widgets.top.js +3 -3
  301. package/extras/tests/core/collection.mjs +2 -9
  302. package/extras/tours/pane.top.js +0 -9
  303. package/map/api/hooks/hooks.catalog.js +18 -4
  304. package/map/api/services/catalog/catalog.hooks.js +3 -0
  305. package/map/api/services/features/features.hooks.js +3 -1
  306. package/map/api/services/index.js +2 -6
  307. package/map/api/services/styles/styles.hooks.js +6 -1
  308. package/map/client/components/KFeatureActionButton.vue +9 -3
  309. package/map/client/components/KFeaturesFilterManager.vue +5 -5
  310. package/map/client/components/KFilterCondition.vue +17 -10
  311. package/map/client/components/KLayerEditor.vue +49 -39
  312. package/map/client/components/KMeasureTool.vue +7 -1
  313. package/map/client/components/KTimezoneMap.vue +29 -9
  314. package/map/client/components/catalog/KLayersPanel.vue +26 -16
  315. package/map/client/components/catalog/KLayersSelector.vue +13 -2
  316. package/map/client/components/catalog/KViewsPanel.vue +5 -4
  317. package/map/client/components/form/KSelectLayersField.vue +28 -17
  318. package/map/client/components/form/KSelectViewsField.vue +18 -9
  319. package/map/client/components/form/KTimezoneField.vue +1 -2
  320. package/map/client/components/legend/KVariablesLegend.vue +10 -1
  321. package/map/client/components/location/KLocationCardSection.vue +7 -2
  322. package/map/client/components/location/KLocationMap.vue +31 -7
  323. package/map/client/components/selection/KSelectedLayerFeatures.vue +2 -2
  324. package/map/client/components/stickies/KZoomControl.vue +1 -1
  325. package/map/client/components/styles/KStyleManager.vue +4 -1
  326. package/map/client/components/widget/KTimeSeries.vue +174 -497
  327. package/map/client/components/widget/KTimeSeriesSelector.vue +72 -0
  328. package/map/client/components/widget/KTimeSeriesToolbar.vue +83 -0
  329. package/map/client/composables/catalog.js +6 -10
  330. package/map/client/composables/highlight.js +12 -9
  331. package/map/client/composables/project.js +1 -1
  332. package/map/client/composables/selection.js +8 -7
  333. package/map/client/composables/weather.js +9 -2
  334. package/map/client/geolocation.js +8 -5
  335. package/map/client/i18n/map_en.json +11 -10
  336. package/map/client/i18n/map_fr.json +10 -9
  337. package/map/client/leaflet/TiledFeatureLayer.js +85 -82
  338. package/map/client/leaflet/utils/utils.geojson.js +3 -3
  339. package/map/client/mixins/globe/mixin.base-globe.js +15 -6
  340. package/map/client/mixins/globe/mixin.geojson-layers.js +27 -18
  341. package/map/client/mixins/map/mixin.edit-layers.js +9 -1
  342. package/map/client/mixins/map/mixin.pmtiles-layers.js +118 -29
  343. package/map/client/mixins/map/mixin.tiled-mesh-layers.js +12 -5
  344. package/map/client/mixins/map/mixin.tiled-wind-layers.js +19 -10
  345. package/map/client/mixins/mixin.activity.js +23 -30
  346. package/map/client/mixins/mixin.feature-selection.js +41 -5
  347. package/map/client/planets.js +1 -1
  348. package/map/client/readers/reader.kml.js +2 -3
  349. package/map/client/utils/utils.catalog.js +36 -10
  350. package/map/client/utils/utils.layers.js +39 -8
  351. package/map/client/utils/utils.project.js +4 -0
  352. package/map/client/utils/utils.style.js +37 -7
  353. package/map/client/utils/utils.time-series.js +215 -6
  354. package/map/common/schemas/catalog.update.json +1 -1
  355. package/map/common/weacast-grid-source.js +1 -1
  356. package/package.json +3 -3
  357. package/scripts/kash/CHANGELOG.md +0 -4
  358. package/scripts/kash/README.md +0 -9
  359. package/scripts/kash/kash.sh +45 -40
  360. package/scripts/kash/scripts/run_tests.sh +1 -4
  361. package/test/api/core/authentication.test.js +9 -4
  362. package/test/api/core/config/default.cjs +1 -0
  363. package/test/api/core/hooks.test.js +6 -0
  364. package/test/api/core/index.test.js +43 -18
  365. package/test/api/core/push.test.js +8 -8
  366. package/test/api/core/test-log-2026-03-10.log +60 -0
  367. package/test/api/core/users.test.js +384 -0
  368. package/test/api/map/grid-sources.test.js +1 -1
  369. package/test/api/map/test-log-2026-03-10.log +56 -0
  370. package/vite/package.json +11 -2
  371. package/vite/test/core/composables.test.js +77 -0
  372. package/vite/vitest.config.js +13 -0
  373. package/vite/yarn.lock +1096 -18
  374. package/.vscode/settings.json +0 -5
  375. package/core/client/components/account/KAccount.vue +0 -68
  376. package/core/client/components/account/KDeleteAccountManager.vue +0 -62
  377. package/core/client/components/account/KEmailManager.vue +0 -128
  378. package/core/client/components/account/KPasswordManager.vue +0 -90
  379. package/core/client/components/account/KVerifyEmailManager.vue +0 -105
  380. package/core/client/components/collection/KColumn.vue +0 -227
  381. package/core/client/components/collection/KHistory.vue +0 -113
  382. package/core/client/components/collection/KHistoryEntry.vue +0 -109
  383. package/coverage/core/api/hooks/hooks.organisations.js.html +0 -541
  384. package/coverage/core/api/services/organisations/organisations.service.js.html +0 -343
  385. package/coverage/core/api/utils.js.html +0 -118
  386. package/coverage/lcov-report/core/api/hooks/hooks.organisations.js.html +0 -541
  387. package/coverage/lcov-report/core/api/services/organisations/organisations.service.js.html +0 -343
  388. package/coverage/lcov-report/core/api/utils.js.html +0 -118
  389. package/coverage/tmp/coverage-151166-1723543324307-0.json +0 -1
  390. package/coverage/tmp/coverage-151178-1723543324283-0.json +0 -1
  391. package/coverage/tmp/coverage-151189-1723543324271-0.json +0 -1
  392. package/coverage/tmp/coverage-151201-1723543324248-0.json +0 -1
  393. package/coverage/tmp/coverage-151208-1723543324227-0.json +0 -1
  394. package/scripts/kash/LICENSE +0 -21
  395. package/test/api/core/test-log-2024-04-22.log +0 -84
  396. package/test/api/core/test-log-2024-04-23.log +0 -23
  397. package/test/api/core/test-log-2024-08-13.log +0 -3
  398. package/test/api/map/test-log-2025-03-08.log +0 -0
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">75.75% </span>
26
+ <span class="strong">80.73% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>175/231</span>
28
+ <span class='fraction'>197/244</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">67.34% </span>
33
+ <span class="strong">67.27% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>33/49</span>
35
+ <span class='fraction'>37/55</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">66.66% </span>
40
+ <span class="strong">72.72% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>14/21</span>
42
+ <span class='fraction'>16/22</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">75.75% </span>
47
+ <span class="strong">80.73% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>175/231</span>
49
+ <span class='fraction'>197/244</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 medium'></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>
@@ -294,7 +294,20 @@
294
294
  <a name='L229'></a><a href='#L229'>229</a>
295
295
  <a name='L230'></a><a href='#L230'>230</a>
296
296
  <a name='L231'></a><a href='#L231'>231</a>
297
- <a name='L232'></a><a href='#L232'>232</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
297
+ <a name='L232'></a><a href='#L232'>232</a>
298
+ <a name='L233'></a><a href='#L233'>233</a>
299
+ <a name='L234'></a><a href='#L234'>234</a>
300
+ <a name='L235'></a><a href='#L235'>235</a>
301
+ <a name='L236'></a><a href='#L236'>236</a>
302
+ <a name='L237'></a><a href='#L237'>237</a>
303
+ <a name='L238'></a><a href='#L238'>238</a>
304
+ <a name='L239'></a><a href='#L239'>239</a>
305
+ <a name='L240'></a><a href='#L240'>240</a>
306
+ <a name='L241'></a><a href='#L241'>241</a>
307
+ <a name='L242'></a><a href='#L242'>242</a>
308
+ <a name='L243'></a><a href='#L243'>243</a>
309
+ <a name='L244'></a><a href='#L244'>244</a>
310
+ <a name='L245'></a><a href='#L245'>245</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
298
311
  <span class="cline-any cline-yes">1x</span>
299
312
  <span class="cline-any cline-yes">1x</span>
300
313
  <span class="cline-any cline-yes">1x</span>
@@ -309,8 +322,16 @@
309
322
  <span class="cline-any cline-no">&nbsp;</span>
310
323
  <span class="cline-any cline-yes">1x</span>
311
324
  <span class="cline-any cline-yes">1x</span>
312
- <span class="cline-any cline-yes">5x</span>
313
- <span class="cline-any cline-yes">5x</span>
325
+ <span class="cline-any cline-yes">1x</span>
326
+ <span class="cline-any cline-yes">28x</span>
327
+ <span class="cline-any cline-yes">28x</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">68x</span>
331
+ <span class="cline-any cline-yes">68x</span>
332
+ <span class="cline-any cline-yes">68x</span>
333
+ <span class="cline-any cline-yes">68x</span>
334
+ <span class="cline-any cline-yes">68x</span>
314
335
  <span class="cline-any cline-yes">1x</span>
315
336
  <span class="cline-any cline-yes">1x</span>
316
337
  <span class="cline-any cline-no">&nbsp;</span>
@@ -321,23 +342,28 @@
321
342
  <span class="cline-any cline-no">&nbsp;</span>
322
343
  <span class="cline-any cline-yes">1x</span>
323
344
  <span class="cline-any cline-yes">1x</span>
324
- <span class="cline-any cline-yes">5x</span>
325
- <span class="cline-any cline-yes">5x</span>
326
- <span class="cline-any cline-yes">5x</span>
327
- <span class="cline-any cline-yes">5x</span>
328
- <span class="cline-any cline-yes">4x</span>
329
- <span class="cline-any cline-yes">5x</span>
345
+ <span class="cline-any cline-yes">18x</span>
346
+ <span class="cline-any cline-yes">18x</span>
347
+ <span class="cline-any cline-yes">18x</span>
348
+ <span class="cline-any cline-yes">18x</span>
349
+ <span class="cline-any cline-yes">17x</span>
350
+ <span class="cline-any cline-yes">17x</span>
351
+ <span class="cline-any cline-yes">17x</span>
352
+ <span class="cline-any cline-yes">17x</span>
353
+ <span class="cline-any cline-yes">17x</span>
354
+ <span class="cline-any cline-yes">17x</span>
355
+ <span class="cline-any cline-yes">18x</span>
330
356
  <span class="cline-any cline-yes">1x</span>
331
357
  <span class="cline-any cline-yes">1x</span>
332
358
  <span class="cline-any cline-yes">1x</span>
333
359
  <span class="cline-any cline-yes">1x</span>
334
360
  <span class="cline-any cline-yes">1x</span>
335
- <span class="cline-any cline-yes">12x</span>
336
- <span class="cline-any cline-yes">12x</span>
337
- <span class="cline-any cline-yes">5x</span>
338
- <span class="cline-any cline-yes">11x</span>
339
- <span class="cline-any cline-yes">11x</span>
340
- <span class="cline-any cline-yes">11x</span>
361
+ <span class="cline-any cline-yes">14x</span>
362
+ <span class="cline-any cline-yes">14x</span>
363
+ <span class="cline-any cline-yes">6x</span>
364
+ <span class="cline-any cline-yes">14x</span>
365
+ <span class="cline-any cline-yes">14x</span>
366
+ <span class="cline-any cline-yes">14x</span>
341
367
  <span class="cline-any cline-yes">4x</span>
342
368
  <span class="cline-any cline-yes">2x</span>
343
369
  <span class="cline-any cline-yes">2x</span>
@@ -348,21 +374,21 @@
348
374
  <span class="cline-any cline-no">&nbsp;</span>
349
375
  <span class="cline-any cline-no">&nbsp;</span>
350
376
  <span class="cline-any cline-yes">2x</span>
351
- <span class="cline-any cline-yes">11x</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">7x</span>
377
+ <span class="cline-any cline-yes">14x</span>
378
+ <span class="cline-any cline-yes">2x</span>
379
+ <span class="cline-any cline-yes">2x</span>
380
+ <span class="cline-any cline-yes">2x</span>
381
+ <span class="cline-any cline-yes">2x</span>
382
+ <span class="cline-any cline-yes">10x</span>
357
383
  <span class="cline-any cline-no">&nbsp;</span>
358
- <span class="cline-any cline-yes">6x</span>
359
- <span class="cline-any cline-yes">6x</span>
384
+ <span class="cline-any cline-yes">8x</span>
385
+ <span class="cline-any cline-yes">8x</span>
360
386
  <span class="cline-any cline-yes">2x</span>
387
+ <span class="cline-any cline-yes">8x</span>
388
+ <span class="cline-any cline-yes">6x</span>
361
389
  <span class="cline-any cline-yes">6x</span>
362
- <span class="cline-any cline-yes">5x</span>
363
- <span class="cline-any cline-yes">5x</span>
364
- <span class="cline-any cline-yes">12x</span>
365
- <span class="cline-any cline-yes">12x</span>
390
+ <span class="cline-any cline-yes">14x</span>
391
+ <span class="cline-any cline-yes">14x</span>
366
392
  <span class="cline-any cline-yes">1x</span>
367
393
  <span class="cline-any cline-yes">1x</span>
368
394
  <span class="cline-any cline-yes">1x</span>
@@ -380,18 +406,18 @@
380
406
  <span class="cline-any cline-yes">1x</span>
381
407
  <span class="cline-any cline-yes">1x</span>
382
408
  <span class="cline-any cline-yes">1x</span>
383
- <span class="cline-any cline-yes">9x</span>
384
- <span class="cline-any cline-yes">9x</span>
385
- <span class="cline-any cline-yes">9x</span>
386
- <span class="cline-any cline-yes">9x</span>
409
+ <span class="cline-any cline-yes">11x</span>
410
+ <span class="cline-any cline-yes">11x</span>
411
+ <span class="cline-any cline-yes">11x</span>
412
+ <span class="cline-any cline-yes">11x</span>
387
413
  <span class="cline-any cline-no">&nbsp;</span>
388
414
  <span class="cline-any cline-no">&nbsp;</span>
389
- <span class="cline-any cline-yes">9x</span>
390
- <span class="cline-any cline-yes">9x</span>
415
+ <span class="cline-any cline-yes">11x</span>
416
+ <span class="cline-any cline-yes">11x</span>
391
417
  <span class="cline-any cline-yes">1x</span>
392
418
  <span class="cline-any cline-yes">1x</span>
393
- <span class="cline-any cline-yes">55x</span>
394
- <span class="cline-any cline-yes">55x</span>
419
+ <span class="cline-any cline-yes">119x</span>
420
+ <span class="cline-any cline-yes">119x</span>
395
421
  <span class="cline-any cline-yes">1x</span>
396
422
  <span class="cline-any cline-yes">1x</span>
397
423
  <span class="cline-any cline-no">&nbsp;</span>
@@ -408,14 +434,37 @@
408
434
  <span class="cline-any cline-no">&nbsp;</span>
409
435
  <span class="cline-any cline-yes">1x</span>
410
436
  <span class="cline-any cline-yes">1x</span>
437
+ <span class="cline-any cline-yes">11x</span>
438
+ <span class="cline-any cline-yes">11x</span>
439
+ <span class="cline-any cline-yes">11x</span>
440
+ <span class="cline-any cline-yes">11x</span>
441
+ <span class="cline-any cline-yes">11x</span>
442
+ <span class="cline-any cline-yes">11x</span>
443
+ <span class="cline-any cline-yes">1x</span>
444
+ <span class="cline-any cline-yes">1x</span>
445
+ <span class="cline-any cline-yes">1x</span>
446
+ <span class="cline-any cline-yes">1x</span>
447
+ <span class="cline-any cline-yes">11x</span>
448
+ <span class="cline-any cline-yes">11x</span>
449
+ <span class="cline-any cline-yes">11x</span>
450
+ <span class="cline-any cline-yes">11x</span>
451
+ <span class="cline-any cline-yes">11x</span>
452
+ <span class="cline-any cline-yes">11x</span>
453
+ <span class="cline-any cline-yes">11x</span>
454
+ <span class="cline-any cline-no">&nbsp;</span>
455
+ <span class="cline-any cline-no">&nbsp;</span>
456
+ <span class="cline-any cline-yes">11x</span>
457
+ <span class="cline-any cline-yes">1x</span>
458
+ <span class="cline-any cline-yes">1x</span>
459
+ <span class="cline-any cline-yes">9x</span>
411
460
  <span class="cline-any cline-yes">9x</span>
412
461
  <span class="cline-any cline-yes">9x</span>
413
462
  <span class="cline-any cline-yes">9x</span>
414
463
  <span class="cline-any cline-yes">9x</span>
464
+ <span class="cline-any cline-no">&nbsp;</span>
465
+ <span class="cline-any cline-yes">9x</span>
415
466
  <span class="cline-any cline-yes">9x</span>
416
467
  <span class="cline-any cline-yes">9x</span>
417
- <span class="cline-any cline-yes">1x</span>
418
- <span class="cline-any cline-yes">1x</span>
419
468
  <span class="cline-any cline-yes">1x</span>
420
469
  <span class="cline-any cline-yes">1x</span>
421
470
  <span class="cline-any cline-yes">9x</span>
@@ -425,105 +474,82 @@
425
474
  <span class="cline-any cline-yes">9x</span>
426
475
  <span class="cline-any cline-yes">9x</span>
427
476
  <span class="cline-any cline-yes">9x</span>
428
- <span class="cline-any cline-no">&nbsp;</span>
429
- <span class="cline-any cline-no">&nbsp;</span>
430
477
  <span class="cline-any cline-yes">9x</span>
431
- <span class="cline-any cline-yes">1x</span>
432
- <span class="cline-any cline-yes">1x</span>
433
- <span class="cline-any cline-yes">7x</span>
434
- <span class="cline-any cline-yes">7x</span>
435
- <span class="cline-any cline-yes">7x</span>
436
- <span class="cline-any cline-yes">7x</span>
437
- <span class="cline-any cline-yes">7x</span>
438
- <span class="cline-any cline-no">&nbsp;</span>
439
- <span class="cline-any cline-yes">7x</span>
440
- <span class="cline-any cline-yes">7x</span>
441
- <span class="cline-any cline-yes">7x</span>
442
- <span class="cline-any cline-yes">1x</span>
443
- <span class="cline-any cline-yes">1x</span>
444
- <span class="cline-any cline-yes">7x</span>
445
- <span class="cline-any cline-yes">7x</span>
446
- <span class="cline-any cline-yes">7x</span>
447
- <span class="cline-any cline-yes">7x</span>
448
- <span class="cline-any cline-yes">7x</span>
449
- <span class="cline-any cline-yes">7x</span>
450
- <span class="cline-any cline-yes">7x</span>
451
- <span class="cline-any cline-yes">7x</span>
452
- <span class="cline-any cline-yes">7x</span>
453
- <span class="cline-any cline-yes">7x</span>
454
- <span class="cline-any cline-yes">7x</span>
478
+ <span class="cline-any cline-yes">9x</span>
479
+ <span class="cline-any cline-yes">9x</span>
480
+ <span class="cline-any cline-yes">9x</span>
455
481
  <span class="cline-any cline-no">&nbsp;</span>
456
482
  <span class="cline-any cline-no">&nbsp;</span>
457
483
  <span class="cline-any cline-no">&nbsp;</span>
458
484
  <span class="cline-any cline-no">&nbsp;</span>
459
485
  <span class="cline-any cline-no">&nbsp;</span>
460
- <span class="cline-any cline-yes">7x</span>
461
- <span class="cline-any cline-yes">7x</span>
462
- <span class="cline-any cline-yes">7x</span>
463
- <span class="cline-any cline-yes">7x</span>
486
+ <span class="cline-any cline-yes">9x</span>
487
+ <span class="cline-any cline-yes">9x</span>
488
+ <span class="cline-any cline-yes">9x</span>
489
+ <span class="cline-any cline-yes">9x</span>
464
490
  <span class="cline-any cline-no">&nbsp;</span>
465
491
  <span class="cline-any cline-no">&nbsp;</span>
466
492
  <span class="cline-any cline-no">&nbsp;</span>
467
- <span class="cline-any cline-yes">7x</span>
493
+ <span class="cline-any cline-yes">9x</span>
468
494
  <span class="cline-any cline-yes">1x</span>
469
495
  <span class="cline-any cline-yes">1x</span>
470
- <span class="cline-any cline-yes">6x</span>
471
- <span class="cline-any cline-yes">6x</span>
472
- <span class="cline-any cline-yes">6x</span>
473
- <span class="cline-any cline-yes">6x</span>
474
- <span class="cline-any cline-yes">6x</span>
475
- <span class="cline-any cline-yes">6x</span>
476
- <span class="cline-any cline-yes">6x</span>
477
- <span class="cline-any cline-yes">6x</span>
478
- <span class="cline-any cline-yes">6x</span>
496
+ <span class="cline-any cline-yes">9x</span>
497
+ <span class="cline-any cline-yes">9x</span>
498
+ <span class="cline-any cline-yes">9x</span>
499
+ <span class="cline-any cline-yes">9x</span>
500
+ <span class="cline-any cline-yes">9x</span>
501
+ <span class="cline-any cline-yes">9x</span>
502
+ <span class="cline-any cline-yes">9x</span>
503
+ <span class="cline-any cline-yes">9x</span>
504
+ <span class="cline-any cline-yes">9x</span>
479
505
  <span class="cline-any cline-no">&nbsp;</span>
480
506
  <span class="cline-any cline-no">&nbsp;</span>
481
- <span class="cline-any cline-yes">6x</span>
482
- <span class="cline-any cline-yes">6x</span>
483
- <span class="cline-any cline-yes">6x</span>
484
- <span class="cline-any cline-yes">6x</span>
485
- <span class="cline-any cline-yes">6x</span>
507
+ <span class="cline-any cline-yes">9x</span>
508
+ <span class="cline-any cline-yes">9x</span>
509
+ <span class="cline-any cline-yes">9x</span>
510
+ <span class="cline-any cline-yes">9x</span>
511
+ <span class="cline-any cline-yes">9x</span>
486
512
  <span class="cline-any cline-no">&nbsp;</span>
487
513
  <span class="cline-any cline-no">&nbsp;</span>
488
514
  <span class="cline-any cline-no">&nbsp;</span>
489
- <span class="cline-any cline-yes">6x</span>
515
+ <span class="cline-any cline-yes">9x</span>
516
+ <span class="cline-any cline-yes">1x</span>
517
+ <span class="cline-any cline-yes">1x</span>
518
+ <span class="cline-any cline-yes">1x</span>
519
+ <span class="cline-any cline-yes">1x</span>
520
+ <span class="cline-any cline-yes">1x</span>
490
521
  <span class="cline-any cline-yes">1x</span>
491
522
  <span class="cline-any cline-yes">1x</span>
492
523
  <span class="cline-any cline-no">&nbsp;</span>
493
524
  <span class="cline-any cline-no">&nbsp;</span>
494
525
  <span class="cline-any cline-no">&nbsp;</span>
495
- <span class="cline-any cline-no">&nbsp;</span>
496
- <span class="cline-any cline-no">&nbsp;</span>
497
- <span class="cline-any cline-no">&nbsp;</span>
498
- <span class="cline-any cline-no">&nbsp;</span>
499
- <span class="cline-any cline-no">&nbsp;</span>
500
- <span class="cline-any cline-no">&nbsp;</span>
501
- <span class="cline-any cline-no">&nbsp;</span>
502
- <span class="cline-any cline-no">&nbsp;</span>
503
- <span class="cline-any cline-no">&nbsp;</span>
526
+ <span class="cline-any cline-yes">1x</span>
527
+ <span class="cline-any cline-yes">1x</span>
528
+ <span class="cline-any cline-yes">1x</span>
504
529
  <span class="cline-any cline-no">&nbsp;</span>
505
530
  <span class="cline-any cline-no">&nbsp;</span>
506
531
  <span class="cline-any cline-no">&nbsp;</span>
507
532
  <span class="cline-any cline-yes">1x</span>
508
533
  <span class="cline-any cline-yes">1x</span>
534
+ <span class="cline-any cline-yes">1x</span>
509
535
  <span class="cline-any cline-no">&nbsp;</span>
510
536
  <span class="cline-any cline-no">&nbsp;</span>
511
537
  <span class="cline-any cline-yes">1x</span>
512
538
  <span class="cline-any cline-yes">1x</span>
513
- <span class="cline-any cline-yes">13x</span>
514
- <span class="cline-any cline-yes">13x</span>
539
+ <span class="cline-any cline-yes">18x</span>
540
+ <span class="cline-any cline-yes">18x</span>
515
541
  <span class="cline-any cline-yes">1x</span>
516
542
  <span class="cline-any cline-yes">1x</span>
517
- <span class="cline-any cline-yes">7x</span>
518
- <span class="cline-any cline-yes">7x</span>
543
+ <span class="cline-any cline-yes">19x</span>
544
+ <span class="cline-any cline-yes">19x</span>
519
545
  <span class="cline-any cline-yes">1x</span>
520
546
  <span class="cline-any cline-yes">1x</span>
521
- <span class="cline-any cline-yes">7x</span>
522
- <span class="cline-any cline-yes">7x</span>
523
- <span class="cline-any cline-yes">7x</span>
524
- <span class="cline-any cline-yes">7x</span>
525
- <span class="cline-any cline-yes">7x</span>
526
- <span class="cline-any cline-yes">7x</span>
547
+ <span class="cline-any cline-yes">19x</span>
548
+ <span class="cline-any cline-yes">19x</span>
549
+ <span class="cline-any cline-yes">19x</span>
550
+ <span class="cline-any cline-yes">19x</span>
551
+ <span class="cline-any cline-yes">19x</span>
552
+ <span class="cline-any cline-yes">19x</span>
527
553
  <span class="cline-any cline-yes">1x</span>
528
554
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import _ from 'lodash'
529
555
  import moment from 'moment'
@@ -539,13 +565,21 @@ Object.getPrototypeOf(moment()).toBSON = <span class="fstat-no" title="function
539
565
  <span class="cstat-no" title="statement not covered" > return this.toDate()</span>
540
566
  <span class="cstat-no" title="statement not covered" >}</span>
541
567
  &nbsp;
568
+ // Check if a given object is an instance of MongoDB ObjectID
542
569
  export function isObjectID (id) {
543
- return id &amp;&amp; (typeof id.toHexString === 'function') <span class="branch-0 cbranch-no" title="branch not covered" >&amp;&amp; (typeof id.getTimestamp === 'function')</span>
570
+ return id &amp;&amp; (typeof id.toHexString === 'function') &amp;&amp; (typeof id.getTimestamp === 'function')
571
+ }
572
+ // Check if a given string is a valid MongoDB ObjectID
573
+ export function isValidObjectID (id) {
574
+ // We don't use ObjectID.isValid as it returns true for any string that contains 12 characters: https://jira.mongodb.org/browse/NODE-4912.
575
+ // Regular expression that checks for hex value
576
+ const checkForHexRegExp = /^[0-9a-fA-F]{24}$/
577
+ return (id &amp;&amp; (id.length === 24) &amp;&amp; checkForHexRegExp.test(id))
544
578
  }
545
579
  &nbsp;
546
580
  export <span class="fstat-no" title="function not covered" >function idToString (id) {</span>
547
581
  <span class="cstat-no" title="statement not covered" > return (typeof id === 'object'</span>
548
- <span class="cstat-no" title="statement not covered" > ? (ObjectID.isValid(id)</span>
582
+ <span class="cstat-no" title="statement not covered" > ? (isObjectID(id)</span>
549
583
  <span class="cstat-no" title="statement not covered" > ? id.toString()</span>
550
584
  <span class="cstat-no" title="statement not covered" > : idToString(id._id))</span>
551
585
  <span class="cstat-no" title="statement not covered" > : id)</span>
@@ -555,8 +589,13 @@ export function createObjectID (id) {
555
589
  // This ensure it works even if id is already an ObjectID
556
590
  if (isObjectID(id)) <span class="branch-0 cbranch-no" title="branch not covered" >return id</span>
557
591
  // Take care that numbers could be a valid object ID
558
- else if ((typeof id === 'number') || !ObjectID.isValid(id)) return null
559
- else return new ObjectID(id)
592
+ else if ((typeof id === 'number') || !isValidObjectID(id)) return null
593
+ else {
594
+ const objectId = new ObjectID(id)
595
+ // It appears that ObjectID.isValid is not reliable in some driver versions, see eg https://jira.mongodb.org/browse/NODE-3760
596
+ // So that we use an additional check here
597
+ return (objectId.toString() === id ? objectId <span class="branch-0 cbranch-no" title="branch not covered" >: null)</span>
598
+ }
560
599
  }
561
600
  &nbsp;
562
601
  // Utility function used to convert from string to MongoDB IDs as required eg by queries
@@ -719,22 +758,22 @@ export class MongoDatabase extends Database {
719
758
  <span class="cstat-no" title="statement not covered" > }</span>
720
759
  }
721
760
  &nbsp;
722
- <span class="fstat-no" title="function not covered" > async healthcheck () {</span>
723
- <span class="cstat-no" title="statement not covered" > try {</span>
724
- <span class="cstat-no" title="statement not covered" > await this.instance.admin().ping()</span>
725
- <span class="cstat-no" title="statement not covered" > if (this._secondaries) {</span>
726
- <span class="cstat-no" title="statement not covered" > const dbNames = _.keys(this._secondaries)</span>
727
- <span class="cstat-no" title="statement not covered" > for (let i = 0; i &lt; dbNames.length; i++) {</span>
761
+ async healthcheck () {
762
+ try {
763
+ await this.instance.admin().ping()
764
+ if (this._secondaries) {
765
+ const dbNames = _.keys(this._secondaries)
766
+ for (let i = 0; i &lt; dbNames.length; i++) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
728
767
  <span class="cstat-no" title="statement not covered" > const dbName = dbNames[i]</span>
729
768
  <span class="cstat-no" title="statement not covered" > await this._dbs[dbName].admin().ping()</span>
730
769
  <span class="cstat-no" title="statement not covered" > }</span>
731
- <span class="cstat-no" title="statement not covered" > }</span>
732
- <span class="cstat-no" title="statement not covered" > return true</span>
733
- <span class="cstat-no" title="statement not covered" > } catch (error) {</span>
770
+ }
771
+ return true
772
+ } <span class="branch-0 cbranch-no" title="branch not covered" >catch (error) {</span>
734
773
  <span class="cstat-no" title="statement not covered" > this.app.logger.error('Healthcheck from ' + this.adapter + ' database(s) failed', error)</span>
735
774
  <span class="cstat-no" title="statement not covered" > return false</span>
736
775
  <span class="cstat-no" title="statement not covered" > }</span>
737
- <span class="cstat-no" title="statement not covered" > }</span>
776
+ }
738
777
  &nbsp;
739
778
  <span class="fstat-no" title="function not covered" > get client () {</span>
740
779
  <span class="cstat-no" title="statement not covered" > return this._client</span>
@@ -763,7 +802,7 @@ export class MongoDatabase extends Database {
763
802
  <div class='footer quiet pad2 space-top1 center small'>
764
803
  Code coverage generated by
765
804
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
766
- at 2024-08-13T10:02:04.872Z
805
+ at 2026-03-10T09:15:24.774Z
767
806
  </div>
768
807
  <script src="../../prettify.js"></script>
769
808
  <script>