@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">16.9% </span>
26
+ <span class="strong">90.14% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>12/71</span>
28
+ <span class='fraction'>64/71</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">100% </span>
33
+ <span class="strong">78.94% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>1/1</span>
35
+ <span class='fraction'>15/19</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">100% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>0/1</span>
42
+ <span class='fraction'>1/1</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">16.9% </span>
47
+ <span class="strong">90.14% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>12/71</span>
49
+ <span class='fraction'>64/71</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>
@@ -146,65 +146,65 @@
146
146
  <span class="cline-any cline-yes">1x</span>
147
147
  <span class="cline-any cline-yes">1x</span>
148
148
  <span class="cline-any cline-yes">1x</span>
149
- <span class="cline-any cline-no">&nbsp;</span>
150
- <span class="cline-any cline-no">&nbsp;</span>
151
- <span class="cline-any cline-no">&nbsp;</span>
152
- <span class="cline-any cline-no">&nbsp;</span>
153
- <span class="cline-any cline-no">&nbsp;</span>
154
- <span class="cline-any cline-no">&nbsp;</span>
155
- <span class="cline-any cline-no">&nbsp;</span>
156
- <span class="cline-any cline-no">&nbsp;</span>
157
- <span class="cline-any cline-no">&nbsp;</span>
158
- <span class="cline-any cline-no">&nbsp;</span>
159
- <span class="cline-any cline-no">&nbsp;</span>
160
- <span class="cline-any cline-no">&nbsp;</span>
161
- <span class="cline-any cline-no">&nbsp;</span>
162
- <span class="cline-any cline-no">&nbsp;</span>
163
- <span class="cline-any cline-no">&nbsp;</span>
164
- <span class="cline-any cline-no">&nbsp;</span>
165
- <span class="cline-any cline-no">&nbsp;</span>
166
- <span class="cline-any cline-no">&nbsp;</span>
167
- <span class="cline-any cline-no">&nbsp;</span>
168
- <span class="cline-any cline-no">&nbsp;</span>
169
- <span class="cline-any cline-no">&nbsp;</span>
170
- <span class="cline-any cline-no">&nbsp;</span>
171
- <span class="cline-any cline-no">&nbsp;</span>
172
- <span class="cline-any cline-no">&nbsp;</span>
173
- <span class="cline-any cline-no">&nbsp;</span>
174
- <span class="cline-any cline-no">&nbsp;</span>
175
- <span class="cline-any cline-no">&nbsp;</span>
176
- <span class="cline-any cline-no">&nbsp;</span>
177
- <span class="cline-any cline-no">&nbsp;</span>
178
- <span class="cline-any cline-no">&nbsp;</span>
179
- <span class="cline-any cline-no">&nbsp;</span>
180
- <span class="cline-any cline-no">&nbsp;</span>
181
- <span class="cline-any cline-no">&nbsp;</span>
182
- <span class="cline-any cline-no">&nbsp;</span>
183
- <span class="cline-any cline-no">&nbsp;</span>
184
- <span class="cline-any cline-no">&nbsp;</span>
185
- <span class="cline-any cline-no">&nbsp;</span>
186
- <span class="cline-any cline-no">&nbsp;</span>
187
- <span class="cline-any cline-no">&nbsp;</span>
188
- <span class="cline-any cline-no">&nbsp;</span>
189
- <span class="cline-any cline-no">&nbsp;</span>
190
- <span class="cline-any cline-no">&nbsp;</span>
191
- <span class="cline-any cline-no">&nbsp;</span>
192
- <span class="cline-any cline-no">&nbsp;</span>
193
- <span class="cline-any cline-no">&nbsp;</span>
194
- <span class="cline-any cline-no">&nbsp;</span>
195
- <span class="cline-any cline-no">&nbsp;</span>
196
- <span class="cline-any cline-no">&nbsp;</span>
197
- <span class="cline-any cline-no">&nbsp;</span>
198
- <span class="cline-any cline-no">&nbsp;</span>
199
- <span class="cline-any cline-no">&nbsp;</span>
200
- <span class="cline-any cline-no">&nbsp;</span>
201
- <span class="cline-any cline-no">&nbsp;</span>
202
- <span class="cline-any cline-no">&nbsp;</span>
203
- <span class="cline-any cline-no">&nbsp;</span>
204
- <span class="cline-any cline-no">&nbsp;</span>
205
- <span class="cline-any cline-no">&nbsp;</span>
206
- <span class="cline-any cline-no">&nbsp;</span>
207
- <span class="cline-any cline-no">&nbsp;</span>
149
+ <span class="cline-any cline-yes">5x</span>
150
+ <span class="cline-any cline-yes">5x</span>
151
+ <span class="cline-any cline-yes">5x</span>
152
+ <span class="cline-any cline-yes">5x</span>
153
+ <span class="cline-any cline-yes">5x</span>
154
+ <span class="cline-any cline-no">&nbsp;</span>
155
+ <span class="cline-any cline-no">&nbsp;</span>
156
+ <span class="cline-any cline-yes">5x</span>
157
+ <span class="cline-any cline-yes">5x</span>
158
+ <span class="cline-any cline-yes">5x</span>
159
+ <span class="cline-any cline-yes">5x</span>
160
+ <span class="cline-any cline-yes">5x</span>
161
+ <span class="cline-any cline-yes">5x</span>
162
+ <span class="cline-any cline-yes">5x</span>
163
+ <span class="cline-any cline-yes">5x</span>
164
+ <span class="cline-any cline-yes">5x</span>
165
+ <span class="cline-any cline-yes">5x</span>
166
+ <span class="cline-any cline-yes">6x</span>
167
+ <span class="cline-any cline-yes">4x</span>
168
+ <span class="cline-any cline-yes">4x</span>
169
+ <span class="cline-any cline-yes">4x</span>
170
+ <span class="cline-any cline-yes">9x</span>
171
+ <span class="cline-any cline-yes">9x</span>
172
+ <span class="cline-any cline-yes">9x</span>
173
+ <span class="cline-any cline-yes">9x</span>
174
+ <span class="cline-any cline-yes">9x</span>
175
+ <span class="cline-any cline-yes">9x</span>
176
+ <span class="cline-any cline-yes">9x</span>
177
+ <span class="cline-any cline-yes">9x</span>
178
+ <span class="cline-any cline-yes">9x</span>
179
+ <span class="cline-any cline-yes">9x</span>
180
+ <span class="cline-any cline-yes">9x</span>
181
+ <span class="cline-any cline-yes">9x</span>
182
+ <span class="cline-any cline-yes">4x</span>
183
+ <span class="cline-any cline-yes">4x</span>
184
+ <span class="cline-any cline-yes">4x</span>
185
+ <span class="cline-any cline-yes">5x</span>
186
+ <span class="cline-any cline-yes">5x</span>
187
+ <span class="cline-any cline-yes">5x</span>
188
+ <span class="cline-any cline-yes">5x</span>
189
+ <span class="cline-any cline-yes">5x</span>
190
+ <span class="cline-any cline-yes">5x</span>
191
+ <span class="cline-any cline-yes">5x</span>
192
+ <span class="cline-any cline-yes">5x</span>
193
+ <span class="cline-any cline-yes">5x</span>
194
+ <span class="cline-any cline-yes">5x</span>
195
+ <span class="cline-any cline-yes">4x</span>
196
+ <span class="cline-any cline-yes">4x</span>
197
+ <span class="cline-any cline-yes">4x</span>
198
+ <span class="cline-any cline-no">&nbsp;</span>
199
+ <span class="cline-any cline-no">&nbsp;</span>
200
+ <span class="cline-any cline-no">&nbsp;</span>
201
+ <span class="cline-any cline-no">&nbsp;</span>
202
+ <span class="cline-any cline-no">&nbsp;</span>
203
+ <span class="cline-any cline-yes">4x</span>
204
+ <span class="cline-any cline-yes">5x</span>
205
+ <span class="cline-any cline-yes">5x</span>
206
+ <span class="cline-any cline-yes">5x</span>
207
+ <span class="cline-any cline-yes">5x</span>
208
208
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import _ from 'lodash'
209
209
  import makeDebug from 'debug'
210
210
  import errors from '@feathersjs/errors'
@@ -216,66 +216,66 @@ const { BadRequest } = errors
216
216
  const { getItems, replaceItems } = commonHooks
217
217
  const debug = makeDebug('kdk:core:schemas:hooks')
218
218
  &nbsp;
219
- export <span class="fstat-no" title="function not covered" >function validateData (schema) {</span>
220
- <span class="cstat-no" title="statement not covered" > // Create Feathers wrapper with our AJV instance</span>
221
- <span class="cstat-no" title="statement not covered" > schema = makeSchema(schema, Schema.ajv)</span>
222
- <span class="cstat-no" title="statement not covered" ></span>
223
- <span class="cstat-no" title="statement not covered" > return async (hook) =&gt; {</span>
224
- <span class="cstat-no" title="statement not covered" > if (hook.type !== 'before') {</span>
219
+ export function validateData (schema) {
220
+ // Create Feathers wrapper with our AJV instance
221
+ schema = makeSchema(schema, Schema.ajv)
222
+ &nbsp;
223
+ return async (hook) =&gt; {
224
+ if (hook.type !== 'before') <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
225
225
  <span class="cstat-no" title="statement not covered" > throw new Error('The \'validateData\' hook should only be used as a \'before\' hook.')</span>
226
226
  <span class="cstat-no" title="statement not covered" > }</span>
227
- <span class="cstat-no" title="statement not covered" ></span>
228
- <span class="cstat-no" title="statement not covered" > let items = getItems(hook)</span>
229
- <span class="cstat-no" title="statement not covered" > const isArray = Array.isArray(items)</span>
230
- <span class="cstat-no" title="statement not covered" > items = (isArray ? items : [items])</span>
231
- <span class="cstat-no" title="statement not covered" > // Perform validation</span>
232
- <span class="cstat-no" title="statement not covered" > items = await Promise.allSettled(items.map((item) =&gt; schema.validate(item)))</span>
233
- <span class="cstat-no" title="statement not covered" > // Keep track of validation errors, even if invalid data will be filtered this ensure</span>
234
- <span class="cstat-no" title="statement not covered" > // original data with validation error will be "tagged"</span>
235
- <span class="cstat-no" title="statement not covered" ></span>
236
- <span class="cstat-no" title="statement not covered" > items.forEach((item, index) =&gt; {</span>
237
- <span class="cstat-no" title="statement not covered" > if (item.status === 'rejected') {</span>
238
- <span class="cstat-no" title="statement not covered" > item.validationError = {</span>
239
- <span class="cstat-no" title="statement not covered" > message: item.reason.message,</span>
240
- <span class="cstat-no" title="statement not covered" > data: item.reason.data.map(error =&gt; {</span>
241
- <span class="cstat-no" title="statement not covered" > // retrieve the data corresponding to the item</span>
242
- <span class="cstat-no" title="statement not covered" > const data = isArray ? hook.data[index] : hook.data</span>
243
- <span class="cstat-no" title="statement not covered" > // compute the property path</span>
244
- <span class="cstat-no" title="statement not covered" > let propertyPath = error.instancePath</span>
245
- <span class="cstat-no" title="statement not covered" > if (_.startsWith(propertyPath, '/')) propertyPath = propertyPath.substring(1)</span>
246
- <span class="cstat-no" title="statement not covered" > propertyPath = propertyPath.replace('/', '.')</span>
247
- <span class="cstat-no" title="statement not covered" > // return the error</span>
248
- <span class="cstat-no" title="statement not covered" > return {</span>
249
- <span class="cstat-no" title="statement not covered" > message: error.message,</span>
250
- <span class="cstat-no" title="statement not covered" > propertyPath: error.instancePath,</span>
251
- <span class="cstat-no" title="statement not covered" > propertyValue: _.get(data, propertyPath)</span>
252
- <span class="cstat-no" title="statement not covered" > }</span>
253
- <span class="cstat-no" title="statement not covered" > })</span>
254
- <span class="cstat-no" title="statement not covered" > }</span>
255
- <span class="cstat-no" title="statement not covered" > }</span>
256
- <span class="cstat-no" title="statement not covered" > })</span>
257
- <span class="cstat-no" title="statement not covered" > // Filter errors/valid data</span>
258
- <span class="cstat-no" title="statement not covered" > const errors = items.filter(item =&gt; item.validationError).map(item =&gt; item.validationError)</span>
259
- <span class="cstat-no" title="statement not covered" > items = items.filter(item =&gt; !item.validationError).map(item =&gt; item.value)</span>
260
- <span class="cstat-no" title="statement not covered" > debug(`Validation performed: found ${items.length} valid item(s), found ${errors.length} invalid item(s)`)</span>
261
- <span class="cstat-no" title="statement not covered" ></span>
262
- <span class="cstat-no" title="statement not covered" > // Raise if no valid data is found</span>
263
- <span class="cstat-no" title="statement not covered" > const hasValidData = (items.length &gt; 0)</span>
264
- <span class="cstat-no" title="statement not covered" > const hasError = (errors.length &gt; 0)</span>
265
- <span class="cstat-no" title="statement not covered" > if (hasError) {</span>
266
- <span class="cstat-no" title="statement not covered" > const firstError = errors[0]</span>
267
- <span class="cstat-no" title="statement not covered" > // Single item case =&gt; raise the error</span>
268
- <span class="cstat-no" title="statement not covered" > if (!isArray) throw new BadRequest(firstError.message, firstError.data)</span>
269
- <span class="cstat-no" title="statement not covered" > // Multiple items case =&gt; raise if no valid data found</span>
227
+ &nbsp;
228
+ let items = getItems(hook)
229
+ const isArray = Array.isArray(items)
230
+ items = (isArray ? items : [items])
231
+ // Perform validation
232
+ items = await Promise.allSettled(items.map((item) =&gt; schema.validate(item)))
233
+ // Keep track of validation errors, even if invalid data will be filtered this ensure
234
+ // original data with validation error will be "tagged"
235
+ &nbsp;
236
+ items.forEach((item, index) =&gt; {
237
+ if (item.status === 'rejected') {
238
+ item.validationError = {
239
+ message: item.reason.message,
240
+ data: item.reason.data.map(error =&gt; {
241
+ // retrieve the data corresponding to the item
242
+ const data = isArray <span class="branch-0 cbranch-no" title="branch not covered" >? hook.data[index] </span>: hook.data
243
+ // compute the property path
244
+ let propertyPath = error.instancePath
245
+ if (_.startsWith(propertyPath, '/')) propertyPath = propertyPath.substring(1)
246
+ propertyPath = propertyPath.replace('/', '.')
247
+ // return the error
248
+ return {
249
+ message: error.message,
250
+ propertyPath: error.instancePath,
251
+ propertyValue: _.get(data, propertyPath)
252
+ }
253
+ })
254
+ }
255
+ }
256
+ })
257
+ // Filter errors/valid data
258
+ const errors = items.filter(item =&gt; item.validationError).map(item =&gt; item.validationError)
259
+ items = items.filter(item =&gt; !item.validationError).map(item =&gt; item.value)
260
+ debug(`Validation performed: found ${items.length} valid item(s), found ${errors.length} invalid item(s)`)
261
+ &nbsp;
262
+ // Raise if no valid data is found
263
+ const hasValidData = (items.length &gt; 0)
264
+ const hasError = (errors.length &gt; 0)
265
+ if (hasError) {
266
+ const firstError = errors[0]
267
+ // Single item case =&gt; raise the error
268
+ if (!isArray) throw new BadRequest(firstError.message, firstError.data)
269
+ <span class="cstat-no" title="statement not covered" ><span class="branch-0 cbranch-no" title="branch not covered" > // Multiple items case =&gt; raise if no valid data found</span></span>
270
270
  <span class="cstat-no" title="statement not covered" > else if (!hasValidData) {</span>
271
271
  <span class="cstat-no" title="statement not covered" > // Keep track of all errors</span>
272
272
  <span class="cstat-no" title="statement not covered" > throw new BadRequest(firstError.message, errors)</span>
273
273
  <span class="cstat-no" title="statement not covered" > }</span>
274
- <span class="cstat-no" title="statement not covered" > }</span>
275
- <span class="cstat-no" title="statement not covered" > replaceItems(hook, isArray ? items : items[0])</span>
276
- <span class="cstat-no" title="statement not covered" > return hook</span>
277
- <span class="cstat-no" title="statement not covered" > }</span>
278
- <span class="cstat-no" title="statement not covered" >}</span>
274
+ }
275
+ replaceItems(hook, isArray ? items <span class="branch-0 cbranch-no" title="branch not covered" >: items[0])</span>
276
+ return hook
277
+ }
278
+ }
279
279
  &nbsp;</pre></td></tr></table></pre>
280
280
 
281
281
  <div class='push'></div><!-- for sticky footer -->
@@ -283,7 +283,7 @@ export <span class="fstat-no" title="function not covered" >function validateDat
283
283
  <div class='footer quiet pad2 space-top1 center small'>
284
284
  Code coverage generated by
285
285
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
286
- at 2024-08-13T10:02:04.872Z
286
+ at 2026-03-10T09:15:24.774Z
287
287
  </div>
288
288
  <script src="../../../prettify.js"></script>
289
289
  <script>
@@ -304,7 +304,7 @@ export function countLimit (options) {
304
304
  <div class='footer quiet pad2 space-top1 center small'>
305
305
  Code coverage generated by
306
306
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
307
- at 2024-08-13T10:02:04.872Z
307
+ at 2026-03-10T09:15:24.774Z
308
308
  </div>
309
309
  <script src="../../../prettify.js"></script>
310
310
  <script>
@@ -178,7 +178,7 @@ export <span class="fstat-no" title="function not covered" >function removeAttac
178
178
  <div class='footer quiet pad2 space-top1 center small'>
179
179
  Code coverage generated by
180
180
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
181
- at 2024-08-13T10:02:04.872Z
181
+ at 2026-03-10T09:15:24.774Z
182
182
  </div>
183
183
  <script src="../../../prettify.js"></script>
184
184
  <script>
@@ -3,7 +3,7 @@
3
3
  <html lang="en">
4
4
 
5
5
  <head>
6
- <title>Code coverage report for core/api/hooks/hooks.groups.js</title>
6
+ <title>Code coverage report for core/api/hooks/hooks.tags.js</title>
7
7
  <meta charset="utf-8" />
8
8
  <link rel="stylesheet" href="../../../prettify.css" />
9
9
  <link rel="stylesheet" href="../../../base.css" />
@@ -19,34 +19,34 @@
19
19
  <body>
20
20
  <div class='wrapper'>
21
21
  <div class='pad1'>
22
- <h1><a href="../../../index.html">All files</a> / <a href="index.html">core/api/hooks</a> hooks.groups.js</h1>
22
+ <h1><a href="../../../index.html">All files</a> / <a href="index.html">core/api/hooks</a> hooks.tags.js</h1>
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">12.5% </span>
26
+ <span class="strong">55.35% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>6/48</span>
28
+ <span class='fraction'>31/56</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">100% </span>
33
+ <span class="strong">40% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>1/1</span>
35
+ <span class='fraction'>2/5</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">100% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>0/2</span>
42
+ <span class='fraction'>1/1</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">12.5% </span>
47
+ <span class="strong">55.35% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>6/48</span>
49
+ <span class='fraction'>31/56</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 medium'></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>
@@ -111,12 +111,46 @@
111
111
  <a name='L46'></a><a href='#L46'>46</a>
112
112
  <a name='L47'></a><a href='#L47'>47</a>
113
113
  <a name='L48'></a><a href='#L48'>48</a>
114
- <a name='L49'></a><a href='#L49'>49</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
114
+ <a name='L49'></a><a href='#L49'>49</a>
115
+ <a name='L50'></a><a href='#L50'>50</a>
116
+ <a name='L51'></a><a href='#L51'>51</a>
117
+ <a name='L52'></a><a href='#L52'>52</a>
118
+ <a name='L53'></a><a href='#L53'>53</a>
119
+ <a name='L54'></a><a href='#L54'>54</a>
120
+ <a name='L55'></a><a href='#L55'>55</a>
121
+ <a name='L56'></a><a href='#L56'>56</a>
122
+ <a name='L57'></a><a href='#L57'>57</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
115
123
  <span class="cline-any cline-yes">1x</span>
116
124
  <span class="cline-any cline-yes">1x</span>
117
125
  <span class="cline-any cline-yes">1x</span>
126
+ <span class="cline-any cline-yes">1x</span>
127
+ <span class="cline-any cline-yes">2x</span>
128
+ <span class="cline-any cline-yes">2x</span>
129
+ <span class="cline-any cline-yes">2x</span>
130
+ <span class="cline-any cline-yes">2x</span>
131
+ <span class="cline-any cline-yes">2x</span>
132
+ <span class="cline-any cline-yes">2x</span>
133
+ <span class="cline-any cline-yes">2x</span>
134
+ <span class="cline-any cline-yes">2x</span>
135
+ <span class="cline-any cline-yes">2x</span>
136
+ <span class="cline-any cline-yes">2x</span>
137
+ <span class="cline-any cline-yes">2x</span>
118
138
  <span class="cline-any cline-no">&nbsp;</span>
119
139
  <span class="cline-any cline-no">&nbsp;</span>
140
+ <span class="cline-any cline-yes">2x</span>
141
+ <span class="cline-any cline-yes">2x</span>
142
+ <span class="cline-any cline-yes">2x</span>
143
+ <span class="cline-any cline-yes">2x</span>
144
+ <span class="cline-any cline-yes">2x</span>
145
+ <span class="cline-any cline-yes">2x</span>
146
+ <span class="cline-any cline-yes">2x</span>
147
+ <span class="cline-any cline-yes">2x</span>
148
+ <span class="cline-any cline-yes">2x</span>
149
+ <span class="cline-any cline-yes">2x</span>
150
+ <span class="cline-any cline-yes">2x</span>
151
+ <span class="cline-any cline-yes">2x</span>
152
+ <span class="cline-any cline-yes">2x</span>
153
+ <span class="cline-any cline-yes">2x</span>
120
154
  <span class="cline-any cline-no">&nbsp;</span>
121
155
  <span class="cline-any cline-no">&nbsp;</span>
122
156
  <span class="cline-any cline-no">&nbsp;</span>
@@ -136,77 +170,67 @@
136
170
  <span class="cline-any cline-no">&nbsp;</span>
137
171
  <span class="cline-any cline-no">&nbsp;</span>
138
172
  <span class="cline-any cline-no">&nbsp;</span>
139
- <span class="cline-any cline-yes">1x</span>
140
- <span class="cline-any cline-yes">1x</span>
141
- <span class="cline-any cline-no">&nbsp;</span>
142
- <span class="cline-any cline-no">&nbsp;</span>
143
- <span class="cline-any cline-no">&nbsp;</span>
144
- <span class="cline-any cline-no">&nbsp;</span>
145
- <span class="cline-any cline-no">&nbsp;</span>
146
- <span class="cline-any cline-no">&nbsp;</span>
147
- <span class="cline-any cline-no">&nbsp;</span>
148
- <span class="cline-any cline-no">&nbsp;</span>
149
- <span class="cline-any cline-no">&nbsp;</span>
150
- <span class="cline-any cline-no">&nbsp;</span>
151
- <span class="cline-any cline-no">&nbsp;</span>
152
- <span class="cline-any cline-no">&nbsp;</span>
153
- <span class="cline-any cline-no">&nbsp;</span>
154
- <span class="cline-any cline-no">&nbsp;</span>
155
- <span class="cline-any cline-no">&nbsp;</span>
156
- <span class="cline-any cline-no">&nbsp;</span>
157
- <span class="cline-any cline-no">&nbsp;</span>
158
173
  <span class="cline-any cline-no">&nbsp;</span>
159
174
  <span class="cline-any cline-no">&nbsp;</span>
160
175
  <span class="cline-any cline-no">&nbsp;</span>
161
176
  <span class="cline-any cline-no">&nbsp;</span>
177
+ <span class="cline-any cline-yes">2x</span>
162
178
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import makeDebug from 'debug'
163
- const debug = makeDebug('kdk:core:groups:hooks')
164
179
  &nbsp;
165
- export <span class="fstat-no" title="function not covered" >function createGroupAuthorisations (hook) {</span>
166
- <span class="cstat-no" title="statement not covered" > const app = hook.app</span>
167
- <span class="cstat-no" title="statement not covered" > const authorisationService = app.getService('authorisations')</span>
168
- <span class="cstat-no" title="statement not covered" > const userService = app.getService('users')</span>
169
- <span class="cstat-no" title="statement not covered" ></span>
170
- <span class="cstat-no" title="statement not covered" > // Set membership for the owner</span>
171
- <span class="cstat-no" title="statement not covered" > return authorisationService.create({</span>
172
- <span class="cstat-no" title="statement not covered" > scope: 'groups',</span>
173
- <span class="cstat-no" title="statement not covered" > permissions: 'owner'</span>
174
- <span class="cstat-no" title="statement not covered" > }, {</span>
175
- <span class="cstat-no" title="statement not covered" > user: hook.params.user,</span>
176
- <span class="cstat-no" title="statement not covered" > // Because we already have subject/resource set it as objects to avoid populating</span>
177
- <span class="cstat-no" title="statement not covered" > subjects: [hook.params.user],</span>
178
- <span class="cstat-no" title="statement not covered" > subjectsService: userService,</span>
179
- <span class="cstat-no" title="statement not covered" > resource: hook.result,</span>
180
- <span class="cstat-no" title="statement not covered" > resourcesService: hook.service</span>
181
- <span class="cstat-no" title="statement not covered" > })</span>
182
- <span class="cstat-no" title="statement not covered" > .then(authorisation =&gt; {</span>
183
- <span class="cstat-no" title="statement not covered" > debug('Group ownership set for user ' + hook.result._id)</span>
184
- <span class="cstat-no" title="statement not covered" > return hook</span>
185
- <span class="cstat-no" title="statement not covered" > })</span>
186
- <span class="cstat-no" title="statement not covered" >}</span>
180
+ const debug = makeDebug('kdk:core:tags:hooks')
187
181
  &nbsp;
188
- export <span class="fstat-no" title="function not covered" >function removeGroupAuthorisations (hook) {</span>
189
- <span class="cstat-no" title="statement not covered" > const app = hook.app</span>
190
- <span class="cstat-no" title="statement not covered" > const authorisationService = app.getService('authorisations')</span>
191
- <span class="cstat-no" title="statement not covered" ></span>
192
- <span class="cstat-no" title="statement not covered" > // Unset membership for the all org users</span>
193
- <span class="cstat-no" title="statement not covered" > return authorisationService.remove(hook.result._id.toString(), {</span>
194
- <span class="cstat-no" title="statement not covered" > query: {</span>
195
- <span class="cstat-no" title="statement not covered" > // Use the organisation user service to only target org users</span>
196
- <span class="cstat-no" title="statement not covered" > subjectsService: hook.service.getContextId() + '/members',</span>
197
- <span class="cstat-no" title="statement not covered" > scope: 'groups'</span>
198
- <span class="cstat-no" title="statement not covered" > },</span>
199
- <span class="cstat-no" title="statement not covered" > user: hook.params.user,</span>
200
- <span class="cstat-no" title="statement not covered" > // Because we already have resource set it as objects to avoid populating</span>
201
- <span class="cstat-no" title="statement not covered" > // Moreover used as an after hook the resource might not already exist anymore</span>
202
- <span class="cstat-no" title="statement not covered" > resource: hook.result,</span>
203
- <span class="cstat-no" title="statement not covered" > resourcesService: hook.service</span>
204
- <span class="cstat-no" title="statement not covered" > })</span>
205
- <span class="cstat-no" title="statement not covered" > .then(authorisation =&gt; {</span>
206
- <span class="cstat-no" title="statement not covered" > debug('Authorisations unset for group ' + hook.result._id)</span>
207
- <span class="cstat-no" title="statement not covered" > return hook</span>
182
+ export async function reflectTagUpdate (hook) {
183
+ const { app, result, params, method } = hook
184
+ &nbsp;
185
+ const { service: targetService, property, name, description, color } = result
186
+ &nbsp;
187
+ if (!targetService) <span class="branch-0 cbranch-no" title="branch not covered" >return hook</span>
188
+ &nbsp;
189
+ const service = app.getService(targetService)
190
+ if (!service) {
191
+ debug('Service not found: ', targetService)
192
+ return hook
193
+ }
194
+ <span class="cstat-no" title="statement not covered" ><span class="branch-0 cbranch-no" title="branch not covered" ></span></span>
195
+ <span class="cstat-no" title="statement not covered" > const previousItem = params.previousItem || {}</span>
196
+ &nbsp;
197
+ const records = await service.find({
198
+ query: {
199
+ [property]: {
200
+ $elemMatch: {
201
+ name: previousItem.name,
202
+ color: previousItem.color
203
+ }
204
+ },
205
+ &nbsp;
206
+ $select: ['_id', property]
207
+ },
208
+ paginate: false
209
+ })
210
+ <span class="cstat-no" title="statement not covered" ><span class="branch-0 cbranch-no" title="branch not covered" ></span></span>
211
+ <span class="cstat-no" title="statement not covered" > for (const record of records) {</span>
212
+ <span class="cstat-no" title="statement not covered" > const updatedTags = record[property].map(tag =&gt; {</span>
213
+ <span class="cstat-no" title="statement not covered" > if (tag.name === previousItem.name &amp;&amp; tag.color === previousItem.color) {</span>
214
+ <span class="cstat-no" title="statement not covered" > if (method === 'remove') {</span>
215
+ <span class="cstat-no" title="statement not covered" > // If the tag is being removed, we return null to filter it out</span>
216
+ <span class="cstat-no" title="statement not covered" > return null</span>
217
+ <span class="cstat-no" title="statement not covered" > }</span>
218
+ <span class="cstat-no" title="statement not covered" > return {</span>
219
+ <span class="cstat-no" title="statement not covered" > ...tag,</span>
220
+ <span class="cstat-no" title="statement not covered" > name,</span>
221
+ <span class="cstat-no" title="statement not covered" > description,</span>
222
+ <span class="cstat-no" title="statement not covered" > color</span>
223
+ <span class="cstat-no" title="statement not covered" > }</span>
224
+ <span class="cstat-no" title="statement not covered" > }</span>
225
+ <span class="cstat-no" title="statement not covered" > return tag</span>
226
+ <span class="cstat-no" title="statement not covered" > }).filter(Boolean)</span>
227
+ <span class="cstat-no" title="statement not covered" > await service.patch(record._id, {</span>
228
+ <span class="cstat-no" title="statement not covered" > [property]: updatedTags</span>
208
229
  <span class="cstat-no" title="statement not covered" > })</span>
209
- <span class="cstat-no" title="statement not covered" >}</span>
230
+ <span class="cstat-no" title="statement not covered" > }</span>
231
+ <span class="cstat-no" title="statement not covered" ></span>
232
+ <span class="cstat-no" title="statement not covered" > return hook</span>
233
+ }
210
234
  &nbsp;</pre></td></tr></table></pre>
211
235
 
212
236
  <div class='push'></div><!-- for sticky footer -->
@@ -214,7 +238,7 @@ export <span class="fstat-no" title="function not covered" >function removeGroup
214
238
  <div class='footer quiet pad2 space-top1 center small'>
215
239
  Code coverage generated by
216
240
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
217
- at 2024-08-13T10:02:04.872Z
241
+ at 2026-03-10T09:15:24.774Z
218
242
  </div>
219
243
  <script src="../../../prettify.js"></script>
220
244
  <script>