@kalisio/kdk 2.5.3 → 2.6.1

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 (541) hide show
  1. package/.github/workflows/main.yaml +35 -6
  2. package/.vscode/settings.json +5 -0
  3. package/client.globe.js +8 -0
  4. package/client.js +8 -0
  5. package/client.map.js +8 -0
  6. package/core/api/hooks/hooks.push.js +3 -2
  7. package/core/api/hooks/hooks.tags.js +56 -0
  8. package/core/api/models/tags.model.mongodb.js +8 -0
  9. package/core/api/services/index.js +33 -2
  10. package/core/api/services/tags/tags.hooks.js +47 -0
  11. package/core/client/api.js +5 -5
  12. package/core/client/components/KActivity.vue +3 -2
  13. package/core/client/components/KChip.vue +2 -2
  14. package/core/client/components/KEditor.vue +3 -1
  15. package/core/client/components/KFollower.vue +4 -4
  16. package/core/client/components/KStore.vue +1 -1
  17. package/core/client/components/KTab.vue +20 -7
  18. package/core/client/components/account/KProfile.vue +9 -25
  19. package/core/client/components/action/KAction.vue +10 -10
  20. package/core/client/components/action/KToggleFullscreenAction.vue +2 -11
  21. package/core/client/components/app/KHome.vue +3 -2
  22. package/core/client/components/collection/KFilter.vue +5 -4
  23. package/core/client/components/collection/KGrid.vue +5 -1
  24. package/core/client/components/collection/KItemsFilter.vue +47 -0
  25. package/core/client/components/collection/KItemsSorter.vue +42 -0
  26. package/core/client/components/collection/KScrollDown.vue +2 -2
  27. package/core/client/components/collection/KSearchFilterControl.vue +3 -2
  28. package/core/client/components/collection/KSorter.vue +33 -37
  29. package/core/client/components/collection/KTagsFilterControl.vue +14 -40
  30. package/core/client/components/collection/KTagsFilterView.vue +10 -45
  31. package/core/client/components/collection/KTimeFilterControl.vue +6 -7
  32. package/core/client/components/collection/KTimeFilterView.vue +13 -22
  33. package/core/client/components/collection/KTimeLine.vue +18 -9
  34. package/core/client/components/form/KColorField.vue +13 -6
  35. package/core/client/components/form/KColorScaleField.vue +7 -12
  36. package/core/client/components/form/KFileField.vue +118 -89
  37. package/core/client/components/form/KForm.vue +30 -18
  38. package/core/client/components/form/KIconField.vue +4 -1
  39. package/core/client/components/form/KNumberField.vue +9 -2
  40. package/core/client/components/form/KSelectField.vue +1 -4
  41. package/core/client/components/form/KTagField.vue +229 -0
  42. package/core/client/components/form/KTextField.vue +4 -0
  43. package/core/client/components/form/KTextareaField.vue +3 -1
  44. package/core/client/components/input/KShapePicker.vue +3 -3
  45. package/core/client/components/layout/KFab.vue +32 -20
  46. package/core/client/components/layout/KPage.vue +11 -6
  47. package/core/client/components/layout/KWindow.vue +6 -1
  48. package/core/client/components/media/index.js +2 -6
  49. package/core/client/components/menu/KMenu.vue +12 -10
  50. package/core/client/components/menu/KSubMenu.vue +12 -12
  51. package/core/client/components/messages/KMessageCard.vue +13 -12
  52. package/core/client/components/messages/KMessageComposer.vue +13 -9
  53. package/core/client/components/messages/KMessagesTimeLine.vue +16 -8
  54. package/core/client/components/tags/KTagFilter.vue +99 -0
  55. package/core/client/components/tags/KTagItem.vue +65 -0
  56. package/core/client/components/tags/KTagManager.vue +198 -0
  57. package/core/client/components/tags/KTagSelection.vue +82 -0
  58. package/core/client/components/time/KDate.vue +3 -17
  59. package/core/client/components/time/KDateTime.vue +1 -1
  60. package/core/client/components/time/KTime.vue +0 -4
  61. package/core/client/composables/collection-filter.js +41 -2
  62. package/core/client/composables/collection.js +3 -3
  63. package/core/client/composables/index.js +1 -0
  64. package/core/client/composables/pwa.js +13 -0
  65. package/core/client/composables/session.js +7 -8
  66. package/core/client/composables/user.js +36 -0
  67. package/core/client/directives/index.js +1 -0
  68. package/core/client/directives/v-drop-file.js +174 -0
  69. package/core/client/document.js +2 -1
  70. package/core/client/exporter.js +17 -3
  71. package/core/client/i18n/core_en.json +34 -7
  72. package/core/client/i18n/core_fr.json +36 -9
  73. package/core/client/i18n.js +26 -11
  74. package/core/client/layout.js +5 -5
  75. package/core/client/mixins/mixin.base-activity.js +8 -5
  76. package/core/client/mixins/mixin.base-editor.js +2 -1
  77. package/core/client/mixins/mixin.base-field.js +3 -2
  78. package/core/client/mixins/mixin.base-item.js +12 -10
  79. package/core/client/mixins/mixin.service.js +3 -1
  80. package/core/client/platform.js +0 -3
  81. package/core/client/readers/reader.json.js +2 -2
  82. package/core/client/utils/index.js +2 -0
  83. package/core/client/utils/utils.collection.js +6 -6
  84. package/core/client/utils/utils.colors.js +473 -173
  85. package/core/client/utils/utils.files.js +19 -0
  86. package/core/client/utils/utils.locale.js +13 -17
  87. package/core/client/utils/utils.services.js +27 -0
  88. package/core/client/utils/utils.shapes.js +2 -2
  89. package/core/client/utils/utils.tags.js +17 -0
  90. package/core/client/utils/utils.tours.js +31 -0
  91. package/core/common/permissions.js +3 -0
  92. package/core/common/schemas/tags.update.json +35 -0
  93. package/core/common/schemas/users.update-profile.json +1 -1
  94. package/core/common/utils.js +5 -5
  95. package/coverage/core/api/application.js.html +464 -464
  96. package/coverage/core/api/authentication.js.html +219 -351
  97. package/coverage/core/api/db.js.html +194 -209
  98. package/coverage/core/api/hooks/hooks.authentication.js.html +208 -34
  99. package/coverage/core/api/hooks/hooks.authorisations.js.html +717 -432
  100. package/coverage/core/api/hooks/hooks.groups.js.html +52 -52
  101. package/coverage/core/api/hooks/hooks.logger.js.html +43 -43
  102. package/coverage/core/api/hooks/hooks.model.js.html +300 -312
  103. package/coverage/core/api/hooks/hooks.organisations.js.html +264 -264
  104. package/coverage/core/api/hooks/hooks.push.js.html +107 -119
  105. package/coverage/core/api/hooks/hooks.query.js.html +279 -279
  106. package/coverage/core/api/hooks/hooks.schemas.js.html +135 -135
  107. package/coverage/core/api/hooks/hooks.service.js.html +28 -28
  108. package/coverage/core/api/hooks/hooks.storage.js.html +7 -7
  109. package/coverage/core/api/hooks/hooks.users.js.html +478 -205
  110. package/coverage/core/api/hooks/index.html +132 -102
  111. package/coverage/core/api/hooks/index.js.html +19 -13
  112. package/coverage/core/api/index.html +69 -54
  113. package/coverage/core/api/index.js.html +25 -25
  114. package/coverage/core/api/marshall.js.html +127 -127
  115. package/coverage/core/api/models/groups.model.mongodb.js.html +26 -26
  116. package/coverage/core/api/models/index.html +66 -21
  117. package/coverage/core/api/models/messages.model.mongodb.js.html +27 -39
  118. package/coverage/core/api/models/organisations.model.mongodb.js.html +16 -16
  119. package/coverage/core/api/models/tags.model.mongodb.js.html +30 -30
  120. package/coverage/core/api/models/users.model.mongodb.js.html +11 -11
  121. package/coverage/core/api/services/account/account.hooks.js.html +46 -46
  122. package/coverage/core/api/services/account/account.service.js.html +139 -139
  123. package/coverage/core/api/services/account/index.html +22 -22
  124. package/coverage/core/api/services/authorisations/authorisations.hooks.js.html +34 -34
  125. package/coverage/core/api/services/authorisations/authorisations.service.js.html +230 -221
  126. package/coverage/core/api/services/authorisations/index.html +20 -20
  127. package/coverage/core/api/services/databases/databases.hooks.js.html +1 -1
  128. package/coverage/core/api/services/databases/databases.service.js.html +1 -1
  129. package/coverage/core/api/services/databases/index.html +1 -1
  130. package/coverage/core/api/services/groups/groups.hooks.js.html +72 -72
  131. package/coverage/core/api/services/groups/index.html +21 -21
  132. package/coverage/core/api/services/import-export/import-export.hooks.js.html +76 -76
  133. package/coverage/core/api/services/import-export/import-export.service.js.html +32 -32
  134. package/coverage/core/api/services/import-export/index.html +32 -32
  135. package/coverage/core/api/services/index.html +21 -21
  136. package/coverage/core/api/services/index.js.html +195 -171
  137. package/coverage/core/api/services/mailer/index.html +32 -32
  138. package/coverage/core/api/services/mailer/mailer.hooks.js.html +80 -80
  139. package/coverage/core/api/services/mailer/mailer.service.js.html +32 -32
  140. package/coverage/core/api/services/messages/index.html +21 -21
  141. package/coverage/core/api/services/messages/messages.hooks.js.html +76 -94
  142. package/coverage/core/api/services/organisations/index.html +32 -32
  143. package/coverage/core/api/services/organisations/organisations.hooks.js.html +72 -72
  144. package/coverage/core/api/services/organisations/organisations.service.js.html +163 -163
  145. package/coverage/core/api/services/push/index.html +32 -32
  146. package/coverage/core/api/services/push/push.hooks.js.html +80 -80
  147. package/coverage/core/api/services/push/push.service.js.html +34 -34
  148. package/coverage/core/api/services/storage/index.html +29 -29
  149. package/coverage/core/api/services/storage/storage.hooks.js.html +80 -80
  150. package/coverage/core/api/services/storage/storage.service.js.html +37 -37
  151. package/coverage/core/api/services/tags/index.html +21 -21
  152. package/coverage/core/api/services/tags/tags.hooks.js.html +72 -72
  153. package/coverage/core/api/services/users/index.html +12 -27
  154. package/coverage/core/api/services/users/users.hooks.js.html +84 -87
  155. package/coverage/core/api/utils.js.html +1 -1
  156. package/coverage/core/common/errors.js.html +2 -2
  157. package/coverage/core/common/index.html +32 -47
  158. package/coverage/core/common/index.js.html +11 -11
  159. package/coverage/core/common/permissions.js.html +579 -264
  160. package/coverage/core/common/schema.js.html +26 -26
  161. package/coverage/core/common/utils.js.html +59 -65
  162. package/coverage/index.html +286 -256
  163. package/coverage/lcov-report/core/api/application.js.html +464 -464
  164. package/coverage/lcov-report/core/api/authentication.js.html +219 -351
  165. package/coverage/lcov-report/core/api/db.js.html +194 -209
  166. package/coverage/lcov-report/core/api/hooks/hooks.authentication.js.html +208 -34
  167. package/coverage/lcov-report/core/api/hooks/hooks.authorisations.js.html +717 -432
  168. package/coverage/lcov-report/core/api/hooks/hooks.groups.js.html +52 -52
  169. package/coverage/lcov-report/core/api/hooks/hooks.logger.js.html +43 -43
  170. package/coverage/lcov-report/core/api/hooks/hooks.model.js.html +300 -312
  171. package/coverage/lcov-report/core/api/hooks/hooks.organisations.js.html +264 -264
  172. package/coverage/lcov-report/core/api/hooks/hooks.push.js.html +107 -119
  173. package/coverage/lcov-report/core/api/hooks/hooks.query.js.html +279 -279
  174. package/coverage/lcov-report/core/api/hooks/hooks.schemas.js.html +135 -135
  175. package/coverage/lcov-report/core/api/hooks/hooks.service.js.html +28 -28
  176. package/coverage/lcov-report/core/api/hooks/hooks.storage.js.html +7 -7
  177. package/coverage/lcov-report/core/api/hooks/hooks.users.js.html +478 -205
  178. package/coverage/lcov-report/core/api/hooks/index.html +132 -102
  179. package/coverage/lcov-report/core/api/hooks/index.js.html +19 -13
  180. package/coverage/lcov-report/core/api/index.html +69 -54
  181. package/coverage/lcov-report/core/api/index.js.html +25 -25
  182. package/coverage/lcov-report/core/api/marshall.js.html +127 -127
  183. package/coverage/lcov-report/core/api/models/groups.model.mongodb.js.html +26 -26
  184. package/coverage/lcov-report/core/api/models/index.html +66 -21
  185. package/coverage/lcov-report/core/api/models/messages.model.mongodb.js.html +27 -39
  186. package/coverage/lcov-report/core/api/models/organisations.model.mongodb.js.html +16 -16
  187. package/coverage/lcov-report/core/api/models/tags.model.mongodb.js.html +30 -30
  188. package/coverage/lcov-report/core/api/models/users.model.mongodb.js.html +11 -11
  189. package/coverage/lcov-report/core/api/services/account/account.hooks.js.html +46 -46
  190. package/coverage/lcov-report/core/api/services/account/account.service.js.html +139 -139
  191. package/coverage/lcov-report/core/api/services/account/index.html +22 -22
  192. package/coverage/lcov-report/core/api/services/authorisations/authorisations.hooks.js.html +34 -34
  193. package/coverage/lcov-report/core/api/services/authorisations/authorisations.service.js.html +230 -221
  194. package/coverage/lcov-report/core/api/services/authorisations/index.html +20 -20
  195. package/coverage/lcov-report/core/api/services/databases/databases.hooks.js.html +1 -1
  196. package/coverage/lcov-report/core/api/services/databases/databases.service.js.html +1 -1
  197. package/coverage/lcov-report/core/api/services/databases/index.html +1 -1
  198. package/coverage/lcov-report/core/api/services/groups/groups.hooks.js.html +72 -72
  199. package/coverage/lcov-report/core/api/services/groups/index.html +21 -21
  200. package/coverage/lcov-report/core/api/services/import-export/import-export.hooks.js.html +76 -76
  201. package/coverage/lcov-report/core/api/services/import-export/import-export.service.js.html +32 -32
  202. package/coverage/lcov-report/core/api/services/import-export/index.html +32 -32
  203. package/coverage/lcov-report/core/api/services/index.html +21 -21
  204. package/coverage/lcov-report/core/api/services/index.js.html +195 -171
  205. package/coverage/lcov-report/core/api/services/mailer/index.html +32 -32
  206. package/coverage/lcov-report/core/api/services/mailer/mailer.hooks.js.html +80 -80
  207. package/coverage/lcov-report/core/api/services/mailer/mailer.service.js.html +32 -32
  208. package/coverage/lcov-report/core/api/services/messages/index.html +21 -21
  209. package/coverage/lcov-report/core/api/services/messages/messages.hooks.js.html +76 -94
  210. package/coverage/lcov-report/core/api/services/organisations/index.html +32 -32
  211. package/coverage/lcov-report/core/api/services/organisations/organisations.hooks.js.html +72 -72
  212. package/coverage/lcov-report/core/api/services/organisations/organisations.service.js.html +163 -163
  213. package/coverage/lcov-report/core/api/services/push/index.html +32 -32
  214. package/coverage/lcov-report/core/api/services/push/push.hooks.js.html +80 -80
  215. package/coverage/lcov-report/core/api/services/push/push.service.js.html +34 -34
  216. package/coverage/lcov-report/core/api/services/storage/index.html +29 -29
  217. package/coverage/lcov-report/core/api/services/storage/storage.hooks.js.html +80 -80
  218. package/coverage/lcov-report/core/api/services/storage/storage.service.js.html +37 -37
  219. package/coverage/lcov-report/core/api/services/tags/index.html +21 -21
  220. package/coverage/lcov-report/core/api/services/tags/tags.hooks.js.html +72 -72
  221. package/coverage/lcov-report/core/api/services/users/index.html +12 -27
  222. package/coverage/lcov-report/core/api/services/users/users.hooks.js.html +84 -87
  223. package/coverage/lcov-report/core/api/utils.js.html +1 -1
  224. package/coverage/lcov-report/core/common/errors.js.html +2 -2
  225. package/coverage/lcov-report/core/common/index.html +32 -47
  226. package/coverage/lcov-report/core/common/index.js.html +11 -11
  227. package/coverage/lcov-report/core/common/permissions.js.html +579 -264
  228. package/coverage/lcov-report/core/common/schema.js.html +26 -26
  229. package/coverage/lcov-report/core/common/utils.js.html +59 -65
  230. package/coverage/lcov-report/index.html +286 -256
  231. package/coverage/lcov-report/map/api/hooks/hooks.catalog.js.html +257 -353
  232. package/coverage/lcov-report/map/api/hooks/hooks.features.js.html +218 -218
  233. package/coverage/lcov-report/map/api/hooks/hooks.query.js.html +810 -795
  234. package/coverage/lcov-report/map/api/hooks/index.html +54 -54
  235. package/coverage/lcov-report/map/api/hooks/index.js.html +16 -16
  236. package/coverage/lcov-report/map/api/index.html +32 -32
  237. package/coverage/lcov-report/map/api/index.js.html +46 -46
  238. package/coverage/lcov-report/map/api/marshall.js.html +72 -72
  239. package/coverage/lcov-report/map/api/models/alerts.model.mongodb.js.html +24 -24
  240. package/coverage/lcov-report/map/api/models/catalog.model.mongodb.js.html +27 -69
  241. package/coverage/lcov-report/map/api/models/features.model.mongodb.js.html +80 -80
  242. package/coverage/lcov-report/map/api/models/index.html +54 -69
  243. package/coverage/lcov-report/map/api/models/projects.model.mongodb.js.html +26 -26
  244. package/coverage/lcov-report/map/api/services/alerts/alerts.hooks.js.html +136 -136
  245. package/coverage/lcov-report/map/api/services/alerts/alerts.service.js.html +343 -343
  246. package/coverage/lcov-report/map/api/services/alerts/index.html +32 -32
  247. package/coverage/lcov-report/map/api/services/catalog/catalog.hooks.js.html +160 -178
  248. package/coverage/lcov-report/map/api/services/catalog/index.html +21 -21
  249. package/coverage/lcov-report/map/api/services/daptiles/daptiles.service.js.html +1 -1
  250. package/coverage/lcov-report/map/api/services/daptiles/index.html +1 -1
  251. package/coverage/lcov-report/map/api/services/features/features.hooks.js.html +114 -183
  252. package/coverage/lcov-report/map/api/services/features/features.service.js.html +56 -359
  253. package/coverage/lcov-report/map/api/services/features/index.html +31 -31
  254. package/coverage/lcov-report/map/api/services/index.html +21 -21
  255. package/coverage/lcov-report/map/api/services/index.js.html +258 -495
  256. package/coverage/lcov-report/map/api/services/projects/index.html +21 -21
  257. package/coverage/lcov-report/map/api/services/projects/projects.hooks.js.html +237 -237
  258. package/coverage/lcov-report/map/common/dynamic-grid-source.js.html +68 -68
  259. package/coverage/lcov-report/map/common/errors.js.html +16 -16
  260. package/coverage/lcov-report/map/common/geotiff-grid-source.js.html +267 -270
  261. package/coverage/lcov-report/map/common/grid.js.html +554 -554
  262. package/coverage/lcov-report/map/common/index.html +158 -158
  263. package/coverage/lcov-report/map/common/index.js.html +68 -68
  264. package/coverage/lcov-report/map/common/meteo-model-grid-source.js.html +73 -73
  265. package/coverage/lcov-report/map/common/moment-utils.js.html +18 -18
  266. package/coverage/lcov-report/map/common/opendap-grid-source.js.html +484 -484
  267. package/coverage/lcov-report/map/common/opendap-utils.js.html +353 -353
  268. package/coverage/lcov-report/map/common/permissions.js.html +36 -42
  269. package/coverage/lcov-report/map/common/time-based-grid-source.js.html +59 -59
  270. package/coverage/lcov-report/map/common/tms-utils.js.html +6 -6
  271. package/coverage/lcov-report/map/common/wcs-grid-source.js.html +190 -190
  272. package/coverage/lcov-report/map/common/wcs-utils.js.html +339 -339
  273. package/coverage/lcov-report/map/common/weacast-grid-source.js.html +345 -345
  274. package/coverage/lcov-report/map/common/wfs-utils.js.html +11 -11
  275. package/coverage/lcov-report/map/common/wms-utils.js.html +8 -8
  276. package/coverage/lcov-report/map/common/wmts-utils.js.html +7 -7
  277. package/coverage/lcov.info +7793 -8564
  278. package/coverage/map/api/hooks/hooks.catalog.js.html +257 -353
  279. package/coverage/map/api/hooks/hooks.features.js.html +218 -218
  280. package/coverage/map/api/hooks/hooks.query.js.html +810 -795
  281. package/coverage/map/api/hooks/index.html +54 -54
  282. package/coverage/map/api/hooks/index.js.html +16 -16
  283. package/coverage/map/api/index.html +32 -32
  284. package/coverage/map/api/index.js.html +46 -46
  285. package/coverage/map/api/marshall.js.html +72 -72
  286. package/coverage/map/api/models/alerts.model.mongodb.js.html +24 -24
  287. package/coverage/map/api/models/catalog.model.mongodb.js.html +27 -69
  288. package/coverage/map/api/models/features.model.mongodb.js.html +80 -80
  289. package/coverage/map/api/models/index.html +54 -69
  290. package/coverage/map/api/models/projects.model.mongodb.js.html +26 -26
  291. package/coverage/map/api/services/alerts/alerts.hooks.js.html +136 -136
  292. package/coverage/map/api/services/alerts/alerts.service.js.html +343 -343
  293. package/coverage/map/api/services/alerts/index.html +32 -32
  294. package/coverage/map/api/services/catalog/catalog.hooks.js.html +160 -178
  295. package/coverage/map/api/services/catalog/index.html +21 -21
  296. package/coverage/map/api/services/daptiles/daptiles.service.js.html +1 -1
  297. package/coverage/map/api/services/daptiles/index.html +1 -1
  298. package/coverage/map/api/services/features/features.hooks.js.html +114 -183
  299. package/coverage/map/api/services/features/features.service.js.html +56 -359
  300. package/coverage/map/api/services/features/index.html +31 -31
  301. package/coverage/map/api/services/index.html +21 -21
  302. package/coverage/map/api/services/index.js.html +258 -495
  303. package/coverage/map/api/services/projects/index.html +21 -21
  304. package/coverage/map/api/services/projects/projects.hooks.js.html +237 -237
  305. package/coverage/map/common/dynamic-grid-source.js.html +68 -68
  306. package/coverage/map/common/errors.js.html +16 -16
  307. package/coverage/map/common/geotiff-grid-source.js.html +267 -270
  308. package/coverage/map/common/grid.js.html +554 -554
  309. package/coverage/map/common/index.html +158 -158
  310. package/coverage/map/common/index.js.html +68 -68
  311. package/coverage/map/common/meteo-model-grid-source.js.html +73 -73
  312. package/coverage/map/common/moment-utils.js.html +18 -18
  313. package/coverage/map/common/opendap-grid-source.js.html +484 -484
  314. package/coverage/map/common/opendap-utils.js.html +353 -353
  315. package/coverage/map/common/permissions.js.html +36 -42
  316. package/coverage/map/common/time-based-grid-source.js.html +59 -59
  317. package/coverage/map/common/tms-utils.js.html +6 -6
  318. package/coverage/map/common/wcs-grid-source.js.html +190 -190
  319. package/coverage/map/common/wcs-utils.js.html +339 -339
  320. package/coverage/map/common/weacast-grid-source.js.html +345 -345
  321. package/coverage/map/common/wfs-utils.js.html +11 -11
  322. package/coverage/map/common/wms-utils.js.html +8 -8
  323. package/coverage/map/common/wmts-utils.js.html +7 -7
  324. package/coverage/tmp/coverage-151166-1723543324307-0.json +1 -0
  325. package/coverage/tmp/coverage-151178-1723543324283-0.json +1 -0
  326. package/coverage/tmp/coverage-151189-1723543324271-0.json +1 -0
  327. package/coverage/tmp/coverage-151201-1723543324248-0.json +1 -0
  328. package/coverage/tmp/coverage-151208-1723543324227-0.json +1 -0
  329. package/extras/configs/panes.top.js +33 -11
  330. package/extras/configs/stickies.js +26 -16
  331. package/extras/configs/widgets.left.js +13 -1
  332. package/extras/libs/jsts.min.js +8 -0
  333. package/{test/client/core/account.js → extras/tests/core/account.mjs} +4 -4
  334. package/extras/tests/core/api.mjs +114 -0
  335. package/{test/client/core/collection.js → extras/tests/core/collection.mjs} +8 -8
  336. package/{test/client/core/dialogs.js → extras/tests/core/dialogs.mjs} +1 -1
  337. package/extras/tests/core/index.mjs +9 -0
  338. package/{test/client/core/layout.js → extras/tests/core/layout.mjs} +7 -3
  339. package/{test/client/core/runner.js → extras/tests/core/runner.mjs} +3 -3
  340. package/{test/client/core/screens.js → extras/tests/core/screens.mjs} +1 -1
  341. package/{test/client/core/utils.js → extras/tests/core/utils.mjs} +79 -26
  342. package/extras/tests/index.mjs +4 -0
  343. package/{test/client/map/api.js → extras/tests/map/api.mjs} +1 -1
  344. package/{test/client/map/catalog.js → extras/tests/map/catalog.mjs} +18 -18
  345. package/{test/client/map/controls.js → extras/tests/map/controls.mjs} +3 -3
  346. package/extras/tests/map/index.mjs +5 -0
  347. package/{test/client/map/time.js → extras/tests/map/time.mjs} +3 -3
  348. package/{test/client/map/utils.js → extras/tests/map/utils.mjs} +6 -5
  349. package/extras/tours/fab.js +36 -0
  350. package/extras/tours/layout.js +49 -0
  351. package/extras/tours/pane.left.js +78 -0
  352. package/extras/tours/pane.right.js +145 -0
  353. package/extras/tours/pane.top.js +239 -0
  354. package/map/api/config/layers.cjs +28 -13
  355. package/map/api/hooks/hooks.query.js +12 -7
  356. package/map/api/models/catalog.model.mongodb.js +17 -6
  357. package/map/api/services/catalog/catalog.hooks.js +1 -1
  358. package/map/api/services/index.js +18 -1
  359. package/map/client/cesium/utils/utils.cesium.js +25 -65
  360. package/map/client/cesium/utils/utils.features.js +1 -0
  361. package/map/client/cesium/utils/utils.geojson.js +1 -0
  362. package/map/client/cesium/utils/utils.style.js +7 -6
  363. package/map/client/components/KFeatureEditor.vue +3 -3
  364. package/map/client/components/KFeaturesChart.vue +4 -4
  365. package/map/client/components/KFeaturesFilterEditor.vue +19 -13
  366. package/map/client/components/KFeaturesFilterManager.vue +7 -4
  367. package/map/client/components/KFeaturesTable.vue +2 -2
  368. package/map/client/components/KLayerEditor.vue +6 -6
  369. package/map/client/components/KMeasureTool.vue +2 -1
  370. package/map/client/components/catalog/KBaseLayersSelector.vue +1 -1
  371. package/map/client/components/catalog/KCategoryItem.vue +15 -1
  372. package/map/client/components/catalog/KConnectLayer.vue +2 -2
  373. package/map/client/components/catalog/KCreateView.vue +3 -2
  374. package/map/client/components/catalog/KFilteredLayerItem.vue +26 -6
  375. package/map/client/components/catalog/KImportLayer.vue +6 -3
  376. package/map/client/components/catalog/KLayerCategories.vue +6 -6
  377. package/map/client/components/catalog/KLayerItem.vue +12 -2
  378. package/map/client/components/catalog/KLayersList.vue +180 -0
  379. package/map/client/components/catalog/KLayersPanel.vue +146 -36
  380. package/map/client/components/catalog/KLayersSelector.vue +96 -48
  381. package/map/client/components/catalog/KProjectEditor.vue +0 -9
  382. package/map/client/components/catalog/KProjectSelector.vue +3 -2
  383. package/map/client/components/catalog/KProjectsPanel.vue +23 -8
  384. package/map/client/components/catalog/KViewsPanel.vue +18 -8
  385. package/map/client/components/catalog/KWeatherLayersSelector.vue +3 -3
  386. package/map/client/components/form/KDirectionField.vue +3 -6
  387. package/map/client/components/form/KLayerCategoryField.vue +2 -2
  388. package/map/client/components/form/KOwsServiceField.vue +25 -24
  389. package/map/client/components/form/KSelectLayersField.vue +4 -4
  390. package/map/client/components/form/KSelectViewsField.vue +4 -4
  391. package/map/client/components/legend/KLayerLegend.vue +11 -2
  392. package/map/client/components/legend/KLegend.vue +44 -51
  393. package/map/client/components/location/KLocationCardSection.vue +6 -7
  394. package/map/client/components/location/KLocationMap.vue +23 -13
  395. package/map/client/components/stickies/KPosition.vue +5 -0
  396. package/map/client/components/stickies/KZoomControl.vue +70 -0
  397. package/map/client/components/styles/KLayerStyleAction.vue +59 -12
  398. package/map/client/components/styles/KStyleEditor.vue +71 -8
  399. package/map/client/components/styles/KStyleEditorSection.vue +82 -33
  400. package/map/client/components/styles/KStyleManager.vue +119 -59
  401. package/map/client/components/styles/KStylePreview.vue +9 -25
  402. package/map/client/components/styles/KStylePreviewItem.vue +22 -1
  403. package/map/client/components/tools/KSearchTool.vue +1 -1
  404. package/map/client/components/widget/KElevationProfile.vue +20 -17
  405. package/map/client/components/widget/KInformationBox.vue +5 -5
  406. package/map/client/components/widget/KMapillaryViewer.vue +2 -1
  407. package/map/client/components/widget/KTimeSeries.vue +11 -9
  408. package/map/client/globe.js +2 -0
  409. package/map/client/i18n/map_en.json +30 -7
  410. package/map/client/i18n/map_fr.json +30 -7
  411. package/map/client/leaflet/GradientPath.js +61 -24
  412. package/map/client/leaflet/ShapeMarker.js +12 -5
  413. package/map/client/leaflet/TiledMeshLayer.js +3 -3
  414. package/map/client/leaflet/utils/utils.geojson.js +66 -8
  415. package/map/client/leaflet/utils/utils.style.js +14 -15
  416. package/map/client/mixins/globe/mixin.base-globe.js +190 -34
  417. package/map/client/mixins/globe/mixin.file-layers.js +3 -0
  418. package/map/client/mixins/globe/mixin.geojson-layers.js +179 -31
  419. package/map/client/mixins/globe/mixin.opendap-layers.js +2 -1
  420. package/map/client/mixins/globe/mixin.style.js +23 -1
  421. package/map/client/mixins/globe/mixin.tooltip.js +14 -2
  422. package/map/client/mixins/map/mixin.base-map.js +156 -58
  423. package/map/client/mixins/map/mixin.edit-layers.js +18 -15
  424. package/map/client/mixins/map/mixin.geojson-layers.js +181 -106
  425. package/map/client/mixins/map/mixin.heatmap-layers.js +3 -2
  426. package/map/client/mixins/map/mixin.map-activity.js +6 -1
  427. package/map/client/mixins/map/mixin.mapillary-layers.js +2 -1
  428. package/map/client/mixins/map/mixin.pmtiles-layers.js +3 -3
  429. package/map/client/mixins/map/mixin.tiled-mesh-layers.js +3 -2
  430. package/map/client/mixins/map/mixin.tiled-wind-layers.js +3 -2
  431. package/map/client/mixins/mixin.activity.js +199 -55
  432. package/map/client/mixins/mixin.context.js +11 -11
  433. package/map/client/mixins/mixin.feature-service.js +11 -9
  434. package/map/client/mixins/mixin.weacast.js +5 -3
  435. package/map/client/readers/reader.geojson.js +3 -1
  436. package/map/client/utils/utils.capture.js +3 -3
  437. package/map/client/utils/utils.catalog.js +9 -5
  438. package/map/client/utils/utils.features.js +120 -54
  439. package/map/client/utils/utils.js +25 -10
  440. package/map/client/utils/utils.layers.js +148 -24
  441. package/map/client/utils/utils.location.js +26 -9
  442. package/map/client/utils/utils.schema.js +2 -1
  443. package/map/client/utils/utils.style.js +53 -9
  444. package/map/common/geotiff-grid-source.js +1 -3
  445. package/map/common/opendap-utils.js +0 -1
  446. package/map/common/tms-utils.js +0 -1
  447. package/map/common/wcs-utils.js +0 -1
  448. package/map/common/wfs-utils.js +0 -1
  449. package/map/common/wms-utils.js +7 -1
  450. package/map/common/wmts-utils.js +0 -1
  451. package/package.json +12 -12
  452. package/scripts/init_runner.sh +3 -3
  453. package/scripts/kash/CHANGELOG.md +27 -0
  454. package/scripts/kash/kash.sh +556 -237
  455. package/scripts/kash/scripts/run_tests.sh +44 -5
  456. package/scripts/setup_workspace.sh +23 -13
  457. package/test/api/core/config/default.cjs +2 -1
  458. package/test/api/core/tags.test.js +62 -0
  459. package/test/api/core/test-log-2024-04-22.log +84 -0
  460. package/test/api/core/{test-log-2025-02-05.log → test-log-2024-04-23.log} +3 -3
  461. package/test/api/core/test-log-2024-08-13.log +3 -0
  462. package/test/api/map/config/default.cjs +2 -1
  463. package/test/api/map/config/layers.json +9 -0
  464. package/test/api/map/data/openradiation.json +13811 -0
  465. package/test/api/map/grid-sources.test.js +1 -3
  466. package/test/api/map/index.test.js +60 -1
  467. package/test/api/map/style.test.js +30 -1
  468. package/test/api/map/test-log-2025-03-08.log +0 -0
  469. package/test.api.js +1 -1
  470. package/vite/App.vue +18 -0
  471. package/vite/AppWithGlobe.vue +84 -0
  472. package/vite/GlobeActivity.vue +58 -0
  473. package/vite/MapActivity.vue +63 -0
  474. package/vite/MapActivityWithGlobe.vue +63 -0
  475. package/vite/README.md +169 -0
  476. package/vite/config.js +221 -0
  477. package/vite/index_with_globe.html +50 -0
  478. package/vite/index_with_map.html +50 -0
  479. package/vite/package.json +173 -0
  480. package/vite/quasar.variables.scss +17 -0
  481. package/vite/vite.config.js +166 -0
  482. package/vite/yarn.lock +11641 -0
  483. package/core/client/components/media/KImageViewer.vue +0 -68
  484. package/core/client/components/media/KMarkdownViewer.vue +0 -55
  485. package/core/client/components/media/KMediaBrowser.vue +0 -301
  486. package/coverage/core/api/services/users/users.service.js.html +0 -100
  487. package/coverage/core/common/utils.offline.js.html +0 -199
  488. package/coverage/lcov-report/core/api/services/users/users.service.js.html +0 -100
  489. package/coverage/lcov-report/core/common/utils.offline.js.html +0 -199
  490. package/coverage/lcov-report/map/api/models/styles.model.mongodb.js.html +0 -112
  491. package/coverage/lcov-report/map/api/services/styles/index.html +0 -116
  492. package/coverage/lcov-report/map/api/services/styles/styles.hooks.js.html +0 -196
  493. package/coverage/map/api/models/styles.model.mongodb.js.html +0 -112
  494. package/coverage/map/api/services/styles/index.html +0 -116
  495. package/coverage/map/api/services/styles/styles.hooks.js.html +0 -196
  496. package/coverage/tmp/coverage-151198-1753351220086-0.json +0 -1
  497. package/coverage/tmp/coverage-151210-1753351220070-0.json +0 -1
  498. package/coverage/tmp/coverage-151221-1753351129816-0.json +0 -1
  499. package/coverage/tmp/coverage-151233-1753351129803-0.json +0 -1
  500. package/coverage/tmp/coverage-151240-1753351129770-0.json +0 -1
  501. package/coverage/tmp/coverage-151307-1753351220058-0.json +0 -1
  502. package/coverage/tmp/coverage-151319-1753351220044-0.json +0 -1
  503. package/coverage/tmp/coverage-151326-1753351220010-0.json +0 -1
  504. package/extras/tours/core/account-profile.js +0 -32
  505. package/extras/tours/core/account.js +0 -143
  506. package/extras/tours/core/add-member.js +0 -75
  507. package/extras/tours/core/add-tag.js +0 -13
  508. package/extras/tours/core/create-group.js +0 -19
  509. package/extras/tours/core/create-organisation.js +0 -19
  510. package/extras/tours/core/create-tag.js +0 -26
  511. package/extras/tours/core/edit-member-role.js +0 -13
  512. package/extras/tours/core/groups.js +0 -65
  513. package/extras/tours/core/join-group.js +0 -13
  514. package/extras/tours/core/login.js +0 -41
  515. package/extras/tours/core/members.js +0 -108
  516. package/extras/tours/core/register.js +0 -61
  517. package/extras/tours/core/send-reset-password.js +0 -14
  518. package/extras/tours/core/tags.js +0 -65
  519. package/extras/tours/map/catalog-panel.js +0 -112
  520. package/extras/tours/map/fab.js +0 -26
  521. package/extras/tours/map/navigation-bar.js +0 -187
  522. package/extras/tours/map/side-nav.js +0 -36
  523. package/test/api/core/test-log-2025-05-21.log +0 -15
  524. package/test/api/core/test-log-2025-06-25.log +0 -9
  525. package/test/api/core/test-log-2025-07-24.log +0 -44
  526. package/test/api/map/test-log-2025-05-27.log +0 -13
  527. package/test/api/map/test-log-2025-06-23.log +0 -7
  528. package/test/api/map/test-log-2025-07-24.log +0 -11
  529. package/test/client/core/api.js +0 -361
  530. package/test/client/core/index.js +0 -9
  531. package/test/client/index.js +0 -4
  532. package/test/client/map/index.js +0 -5
  533. package/test.client.js +0 -1
  534. /package/{test/client/core/time.js → extras/tests/core/time.mjs} +0 -0
  535. /package/extras/tours/{map/add-layer.js → add-layer.js} +0 -0
  536. /package/extras/tours/{map/catalog-categories.js → catalog-categories.js} +0 -0
  537. /package/extras/tours/{map/connect-layer.js → connect-layer.js} +0 -0
  538. /package/extras/tours/{map/create-layer.js → create-layer.js} +0 -0
  539. /package/extras/tours/{map/create-view.js → create-view.js} +0 -0
  540. /package/extras/tours/{map/import-layer.js → import-layer.js} +0 -0
  541. /package/extras/tours/{map/timeline.js → pane.bottom.js} +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">63.75% </span>
26
+ <span class="strong">36.94% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>95/149</span>
28
+ <span class='fraction'>58/157</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">87.5% </span>
33
+ <span class="strong">75% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>7/8</span>
35
+ <span class='fraction'>3/4</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">33.33% </span>
40
+ <span class="strong">20% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>3/9</span>
42
+ <span class='fraction'>2/10</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">63.75% </span>
47
+ <span class="strong">36.94% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>95/149</span>
49
+ <span class='fraction'>58/157</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 low'></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>
@@ -212,41 +212,81 @@
212
212
  <a name='L147'></a><a href='#L147'>147</a>
213
213
  <a name='L148'></a><a href='#L148'>148</a>
214
214
  <a name='L149'></a><a href='#L149'>149</a>
215
- <a name='L150'></a><a href='#L150'>150</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">2x</span>
216
- <span class="cline-any cline-yes">2x</span>
217
- <span class="cline-any cline-yes">2x</span>
218
- <span class="cline-any cline-yes">2x</span>
219
- <span class="cline-any cline-yes">2x</span>
220
- <span class="cline-any cline-yes">2x</span>
221
- <span class="cline-any cline-yes">2x</span>
222
- <span class="cline-any cline-yes">2x</span>
223
- <span class="cline-any cline-yes">2x</span>
224
- <span class="cline-any cline-yes">2x</span>
225
- <span class="cline-any cline-yes">2x</span>
226
- <span class="cline-any cline-yes">2x</span>
227
- <span class="cline-any cline-yes">2x</span>
228
- <span class="cline-any cline-yes">2x</span>
215
+ <a name='L150'></a><a href='#L150'>150</a>
216
+ <a name='L151'></a><a href='#L151'>151</a>
217
+ <a name='L152'></a><a href='#L152'>152</a>
218
+ <a name='L153'></a><a href='#L153'>153</a>
219
+ <a name='L154'></a><a href='#L154'>154</a>
220
+ <a name='L155'></a><a href='#L155'>155</a>
221
+ <a name='L156'></a><a href='#L156'>156</a>
222
+ <a name='L157'></a><a href='#L157'>157</a>
223
+ <a name='L158'></a><a href='#L158'>158</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
224
+ <span class="cline-any cline-yes">1x</span>
225
+ <span class="cline-any cline-yes">1x</span>
226
+ <span class="cline-any cline-yes">1x</span>
227
+ <span class="cline-any cline-yes">1x</span>
228
+ <span class="cline-any cline-yes">1x</span>
229
+ <span class="cline-any cline-yes">1x</span>
230
+ <span class="cline-any cline-yes">1x</span>
231
+ <span class="cline-any cline-yes">1x</span>
232
+ <span class="cline-any cline-yes">1x</span>
233
+ <span class="cline-any cline-yes">1x</span>
234
+ <span class="cline-any cline-yes">1x</span>
235
+ <span class="cline-any cline-no">&nbsp;</span>
236
+ <span class="cline-any cline-no">&nbsp;</span>
237
+ <span class="cline-any cline-no">&nbsp;</span>
238
+ <span class="cline-any cline-no">&nbsp;</span>
239
+ <span class="cline-any cline-no">&nbsp;</span>
240
+ <span class="cline-any cline-no">&nbsp;</span>
241
+ <span class="cline-any cline-yes">1x</span>
242
+ <span class="cline-any cline-yes">1x</span>
243
+ <span class="cline-any cline-no">&nbsp;</span>
244
+ <span class="cline-any cline-no">&nbsp;</span>
245
+ <span class="cline-any cline-no">&nbsp;</span>
246
+ <span class="cline-any cline-yes">1x</span>
247
+ <span class="cline-any cline-yes">1x</span>
248
+ <span class="cline-any cline-yes">7x</span>
249
+ <span class="cline-any cline-yes">7x</span>
250
+ <span class="cline-any cline-yes">7x</span>
251
+ <span class="cline-any cline-yes">7x</span>
252
+ <span class="cline-any cline-yes">7x</span>
253
+ <span class="cline-any cline-yes">7x</span>
254
+ <span class="cline-any cline-yes">7x</span>
255
+ <span class="cline-any cline-yes">7x</span>
256
+ <span class="cline-any cline-yes">7x</span>
257
+ <span class="cline-any cline-yes">1x</span>
258
+ <span class="cline-any cline-yes">1x</span>
229
259
  <span class="cline-any cline-no">&nbsp;</span>
230
260
  <span class="cline-any cline-no">&nbsp;</span>
231
261
  <span class="cline-any cline-no">&nbsp;</span>
262
+ <span class="cline-any cline-yes">1x</span>
263
+ <span class="cline-any cline-yes">1x</span>
232
264
  <span class="cline-any cline-no">&nbsp;</span>
233
265
  <span class="cline-any cline-no">&nbsp;</span>
234
266
  <span class="cline-any cline-no">&nbsp;</span>
235
267
  <span class="cline-any cline-no">&nbsp;</span>
236
268
  <span class="cline-any cline-no">&nbsp;</span>
237
269
  <span class="cline-any cline-no">&nbsp;</span>
270
+ <span class="cline-any cline-yes">1x</span>
271
+ <span class="cline-any cline-yes">1x</span>
238
272
  <span class="cline-any cline-no">&nbsp;</span>
239
273
  <span class="cline-any cline-no">&nbsp;</span>
240
274
  <span class="cline-any cline-no">&nbsp;</span>
275
+ <span class="cline-any cline-yes">1x</span>
276
+ <span class="cline-any cline-yes">1x</span>
277
+ <span class="cline-any cline-no">&nbsp;</span>
241
278
  <span class="cline-any cline-no">&nbsp;</span>
242
279
  <span class="cline-any cline-no">&nbsp;</span>
243
280
  <span class="cline-any cline-no">&nbsp;</span>
244
281
  <span class="cline-any cline-no">&nbsp;</span>
245
282
  <span class="cline-any cline-no">&nbsp;</span>
246
- <span class="cline-any cline-yes">2x</span>
247
- <span class="cline-any cline-yes">2x</span>
283
+ <span class="cline-any cline-yes">1x</span>
284
+ <span class="cline-any cline-yes">1x</span>
285
+ <span class="cline-any cline-no">&nbsp;</span>
248
286
  <span class="cline-any cline-no">&nbsp;</span>
249
287
  <span class="cline-any cline-no">&nbsp;</span>
288
+ <span class="cline-any cline-yes">1x</span>
289
+ <span class="cline-any cline-yes">1x</span>
250
290
  <span class="cline-any cline-no">&nbsp;</span>
251
291
  <span class="cline-any cline-no">&nbsp;</span>
252
292
  <span class="cline-any cline-no">&nbsp;</span>
@@ -264,109 +304,83 @@
264
304
  <span class="cline-any cline-no">&nbsp;</span>
265
305
  <span class="cline-any cline-no">&nbsp;</span>
266
306
  <span class="cline-any cline-no">&nbsp;</span>
267
- <span class="cline-any cline-yes">2x</span>
268
- <span class="cline-any cline-yes">2x</span>
269
- <span class="cline-any cline-yes">11x</span>
270
- <span class="cline-any cline-yes">11x</span>
271
- <span class="cline-any cline-yes">11x</span>
272
- <span class="cline-any cline-yes">11x</span>
273
- <span class="cline-any cline-yes">11x</span>
274
- <span class="cline-any cline-yes">11x</span>
275
- <span class="cline-any cline-yes">11x</span>
276
- <span class="cline-any cline-yes">11x</span>
277
- <span class="cline-any cline-yes">11x</span>
278
- <span class="cline-any cline-yes">2x</span>
279
- <span class="cline-any cline-yes">2x</span>
280
307
  <span class="cline-any cline-no">&nbsp;</span>
281
308
  <span class="cline-any cline-no">&nbsp;</span>
282
309
  <span class="cline-any cline-no">&nbsp;</span>
283
- <span class="cline-any cline-yes">2x</span>
284
- <span class="cline-any cline-yes">2x</span>
285
- <span class="cline-any cline-yes">1x</span>
286
- <span class="cline-any cline-yes">1x</span>
287
- <span class="cline-any cline-yes">1x</span>
288
- <span class="cline-any cline-yes">1x</span>
289
- <span class="cline-any cline-yes">1x</span>
290
- <span class="cline-any cline-yes">1x</span>
291
- <span class="cline-any cline-yes">2x</span>
292
- <span class="cline-any cline-yes">2x</span>
293
310
  <span class="cline-any cline-no">&nbsp;</span>
294
311
  <span class="cline-any cline-no">&nbsp;</span>
295
312
  <span class="cline-any cline-no">&nbsp;</span>
296
- <span class="cline-any cline-yes">2x</span>
297
- <span class="cline-any cline-yes">2x</span>
298
313
  <span class="cline-any cline-no">&nbsp;</span>
299
314
  <span class="cline-any cline-no">&nbsp;</span>
300
315
  <span class="cline-any cline-no">&nbsp;</span>
301
316
  <span class="cline-any cline-no">&nbsp;</span>
302
317
  <span class="cline-any cline-no">&nbsp;</span>
303
318
  <span class="cline-any cline-no">&nbsp;</span>
304
- <span class="cline-any cline-yes">2x</span>
305
- <span class="cline-any cline-yes">2x</span>
306
319
  <span class="cline-any cline-no">&nbsp;</span>
307
320
  <span class="cline-any cline-no">&nbsp;</span>
308
321
  <span class="cline-any cline-no">&nbsp;</span>
309
- <span class="cline-any cline-yes">2x</span>
310
- <span class="cline-any cline-yes">2x</span>
311
- <span class="cline-any cline-yes">11x</span>
312
- <span class="cline-any cline-yes">11x</span>
313
- <span class="cline-any cline-yes">11x</span>
314
- <span class="cline-any cline-yes">11x</span>
315
- <span class="cline-any cline-yes">11x</span>
316
- <span class="cline-any cline-yes">11x</span>
317
- <span class="cline-any cline-yes">11x</span>
318
- <span class="cline-any cline-yes">11x</span>
319
- <span class="cline-any cline-yes">11x</span>
320
- <span class="cline-any cline-yes">11x</span>
321
- <span class="cline-any cline-yes">11x</span>
322
- <span class="cline-any cline-yes">11x</span>
323
- <span class="cline-any cline-yes">11x</span>
324
- <span class="cline-any cline-yes">11x</span>
325
- <span class="cline-any cline-yes">11x</span>
326
- <span class="cline-any cline-yes">11x</span>
327
- <span class="cline-any cline-yes">11x</span>
328
- <span class="cline-any cline-yes">11x</span>
329
- <span class="cline-any cline-yes">11x</span>
330
- <span class="cline-any cline-yes">11x</span>
331
- <span class="cline-any cline-yes">11x</span>
332
- <span class="cline-any cline-yes">11x</span>
333
- <span class="cline-any cline-yes">11x</span>
334
- <span class="cline-any cline-yes">11x</span>
335
- <span class="cline-any cline-yes">11x</span>
336
- <span class="cline-any cline-yes">11x</span>
337
- <span class="cline-any cline-yes">11x</span>
338
- <span class="cline-any cline-yes">11x</span>
322
+ <span class="cline-any cline-no">&nbsp;</span>
323
+ <span class="cline-any cline-no">&nbsp;</span>
324
+ <span class="cline-any cline-yes">1x</span>
325
+ <span class="cline-any cline-yes">1x</span>
326
+ <span class="cline-any cline-yes">7x</span>
327
+ <span class="cline-any cline-yes">7x</span>
339
328
  <span class="cline-any cline-yes">7x</span>
340
329
  <span class="cline-any cline-yes">7x</span>
341
330
  <span class="cline-any cline-yes">7x</span>
342
331
  <span class="cline-any cline-yes">7x</span>
343
332
  <span class="cline-any cline-yes">7x</span>
344
333
  <span class="cline-any cline-yes">7x</span>
345
- <span class="cline-any cline-yes">11x</span>
346
- <span class="cline-any cline-yes">11x</span>
347
- <span class="cline-any cline-yes">11x</span>
348
- <span class="cline-any cline-no">&nbsp;</span>
349
- <span class="cline-any cline-no">&nbsp;</span>
350
- <span class="cline-any cline-no">&nbsp;</span>
351
- <span class="cline-any cline-yes">11x</span>
352
- <span class="cline-any cline-yes">11x</span>
353
- <span class="cline-any cline-yes">11x</span>
354
334
  <span class="cline-any cline-yes">7x</span>
355
335
  <span class="cline-any cline-yes">7x</span>
356
336
  <span class="cline-any cline-yes">7x</span>
357
- <span class="cline-any cline-yes">11x</span>
358
- <span class="cline-any cline-yes">11x</span>
359
- <span class="cline-any cline-yes">11x</span>
360
337
  <span class="cline-any cline-yes">7x</span>
361
338
  <span class="cline-any cline-yes">7x</span>
362
339
  <span class="cline-any cline-yes">7x</span>
363
- <span class="cline-any cline-yes">11x</span>
340
+ <span class="cline-any cline-yes">7x</span>
341
+ <span class="cline-any cline-yes">7x</span>
342
+ <span class="cline-any cline-yes">7x</span>
343
+ <span class="cline-any cline-yes">7x</span>
344
+ <span class="cline-any cline-no">&nbsp;</span>
345
+ <span class="cline-any cline-no">&nbsp;</span>
346
+ <span class="cline-any cline-no">&nbsp;</span>
347
+ <span class="cline-any cline-no">&nbsp;</span>
348
+ <span class="cline-any cline-no">&nbsp;</span>
349
+ <span class="cline-any cline-no">&nbsp;</span>
350
+ <span class="cline-any cline-no">&nbsp;</span>
351
+ <span class="cline-any cline-no">&nbsp;</span>
352
+ <span class="cline-any cline-no">&nbsp;</span>
353
+ <span class="cline-any cline-no">&nbsp;</span>
354
+ <span class="cline-any cline-no">&nbsp;</span>
355
+ <span class="cline-any cline-no">&nbsp;</span>
356
+ <span class="cline-any cline-no">&nbsp;</span>
357
+ <span class="cline-any cline-no">&nbsp;</span>
358
+ <span class="cline-any cline-no">&nbsp;</span>
359
+ <span class="cline-any cline-no">&nbsp;</span>
360
+ <span class="cline-any cline-no">&nbsp;</span>
361
+ <span class="cline-any cline-no">&nbsp;</span>
362
+ <span class="cline-any cline-no">&nbsp;</span>
363
+ <span class="cline-any cline-no">&nbsp;</span>
364
+ <span class="cline-any cline-no">&nbsp;</span>
365
+ <span class="cline-any cline-no">&nbsp;</span>
366
+ <span class="cline-any cline-no">&nbsp;</span>
367
+ <span class="cline-any cline-no">&nbsp;</span>
368
+ <span class="cline-any cline-no">&nbsp;</span>
369
+ <span class="cline-any cline-no">&nbsp;</span>
370
+ <span class="cline-any cline-no">&nbsp;</span>
371
+ <span class="cline-any cline-no">&nbsp;</span>
372
+ <span class="cline-any cline-no">&nbsp;</span>
373
+ <span class="cline-any cline-no">&nbsp;</span>
374
+ <span class="cline-any cline-no">&nbsp;</span>
375
+ <span class="cline-any cline-no">&nbsp;</span>
376
+ <span class="cline-any cline-no">&nbsp;</span>
377
+ <span class="cline-any cline-no">&nbsp;</span>
378
+ <span class="cline-any cline-no">&nbsp;</span>
379
+ <span class="cline-any cline-yes">7x</span>
364
380
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import _ from 'lodash'
365
381
  import path from 'path'
366
382
  import makeDebug from 'debug'
367
383
  import { fileURLToPath } from 'url'
368
- import mongodb from 'mongodb'
369
- const { ObjectID } = mongodb
370
384
  &nbsp;
371
385
  const __dirname = path.dirname(fileURLToPath(import.meta.url))
372
386
  const modelsPath = path.join(__dirname, '..', 'models')
@@ -374,44 +388,17 @@ const servicesPath = path.join(__dirname, '..', 'services')
374
388
  &nbsp;
375
389
  const debug = makeDebug('kdk:core:services')
376
390
  &nbsp;
377
- export <span class="fstat-no" title="function not covered" >function getServiceNameAndContext (servicePath) {</span>
391
+ export <span class="fstat-no" title="function not covered" >function createTagService (options = {}) {</span>
378
392
  <span class="cstat-no" title="statement not covered" > const app = this</span>
379
- <span class="cstat-no" title="statement not covered" > // Get name from service path without api prefix</span>
380
- <span class="cstat-no" title="statement not covered" > let name = servicePath.replace(app.get('apiPath').substring(1) + '/', '')</span>
381
- <span class="cstat-no" title="statement not covered" > // Then without context if any</span>
382
- <span class="cstat-no" title="statement not covered" > const lastSlash = name.lastIndexOf('/')</span>
383
- <span class="cstat-no" title="statement not covered" > const contextId = (lastSlash &gt;= 0 ? name.substring(0, lastSlash) : '')</span>
384
- <span class="cstat-no" title="statement not covered" > // Check if a string is a valid MongoDB Object ID.</span>
385
- <span class="cstat-no" title="statement not covered" > // We don't use ObjectID.isValid as it returns true for any string that contains 12 characters: https://jira.mongodb.org/browse/NODE-4912.</span>
386
- <span class="cstat-no" title="statement not covered" > // Regular expression that checks for hex value</span>
387
- <span class="cstat-no" title="statement not covered" > const checkForHexRegExp = /^[0-9a-fA-F]{24}$/</span>
388
- <span class="cstat-no" title="statement not covered" > if (contextId &amp;&amp; (contextId.length === 24) &amp;&amp; checkForHexRegExp.test(contextId)) {</span>
389
- <span class="cstat-no" title="statement not covered" > name = name.replace(contextId + '/', '')</span>
390
- <span class="cstat-no" title="statement not covered" > return { name, contextId }</span>
391
- <span class="cstat-no" title="statement not covered" > } else {</span>
392
- <span class="cstat-no" title="statement not covered" > return { name }</span>
393
- <span class="cstat-no" title="statement not covered" > }</span>
393
+ <span class="cstat-no" title="statement not covered" > return app.createService('tags', Object.assign({</span>
394
+ <span class="cstat-no" title="statement not covered" > servicesPath,</span>
395
+ <span class="cstat-no" title="statement not covered" > modelsPath</span>
396
+ <span class="cstat-no" title="statement not covered" > }, options))</span>
394
397
  <span class="cstat-no" title="statement not covered" >}</span>
395
398
  &nbsp;
396
- export <span class="fstat-no" title="function not covered" >function decorateDistributedService (service) {</span>
399
+ export <span class="fstat-no" title="function not covered" >function removeTagService (options = {}) {</span>
397
400
  <span class="cstat-no" title="statement not covered" > const app = this</span>
398
- <span class="cstat-no" title="statement not covered" > // Remote service are registered according to their path, ie with API prefix (but without trailing /)</span>
399
- <span class="cstat-no" title="statement not covered" > const remoteService = app.service(service.path)</span>
400
- <span class="cstat-no" title="statement not covered" > const { name, contextId } = getServiceNameAndContext.call(app, service.path)</span>
401
- <span class="cstat-no" title="statement not covered" > remoteService.name = name</span>
402
- <span class="cstat-no" title="statement not covered" > remoteService.context = contextId</span>
403
- <span class="cstat-no" title="statement not covered" > // As remote services have no context, from the internal point of view path = name</span>
404
- <span class="cstat-no" title="statement not covered" > // Unfortunately this property is already set and used by feathers-distributed and should not be altered</span>
405
- <span class="cstat-no" title="statement not covered" > // remoteService.path = name</span>
406
- <span class="cstat-no" title="statement not covered" > remoteService.app = app</span>
407
- <span class="cstat-no" title="statement not covered" > remoteService.getPath = function (withApiPrefix) {</span>
408
- <span class="cstat-no" title="statement not covered" > const path = (contextId ? contextId + '/' + name : name)</span>
409
- <span class="cstat-no" title="statement not covered" > return (withApiPrefix ? app.get('apiPath') + '/' + path : path)</span>
410
- <span class="cstat-no" title="statement not covered" > }</span>
411
- <span class="cstat-no" title="statement not covered" > remoteService.getContextId = function () {</span>
412
- <span class="cstat-no" title="statement not covered" > return contextId</span>
413
- <span class="cstat-no" title="statement not covered" > }</span>
414
- <span class="cstat-no" title="statement not covered" > return remoteService</span>
401
+ <span class="cstat-no" title="statement not covered" > return app.removeService(app.getService('tags', options.context))</span>
415
402
  <span class="cstat-no" title="statement not covered" >}</span>
416
403
  &nbsp;
417
404
  export function createStorageService (options = {}) {
@@ -430,13 +417,13 @@ export <span class="fstat-no" title="function not covered" >function removeStora
430
417
  <span class="cstat-no" title="statement not covered" > return app.removeService(app.getService('storage', options.context))</span>
431
418
  <span class="cstat-no" title="statement not covered" >}</span>
432
419
  &nbsp;
433
- export function createMessagesService (options = {}) {
434
- const app = this
435
- return app.createService('messages', Object.assign({
436
- servicesPath,
437
- modelsPath
438
- }, options))
439
- }
420
+ export <span class="fstat-no" title="function not covered" >function createMessagesService (options = {}) {</span>
421
+ <span class="cstat-no" title="statement not covered" > const app = this</span>
422
+ <span class="cstat-no" title="statement not covered" > return app.createService('messages', Object.assign({</span>
423
+ <span class="cstat-no" title="statement not covered" > servicesPath,</span>
424
+ <span class="cstat-no" title="statement not covered" > modelsPath</span>
425
+ <span class="cstat-no" title="statement not covered" > }, options))</span>
426
+ <span class="cstat-no" title="statement not covered" >}</span>
440
427
  &nbsp;
441
428
  export <span class="fstat-no" title="function not covered" >function removeMessagesService (options = {}) {</span>
442
429
  <span class="cstat-no" title="statement not covered" > const app = this</span>
@@ -456,17 +443,48 @@ export <span class="fstat-no" title="function not covered" >function removeDatab
456
443
  <span class="cstat-no" title="statement not covered" > return app.removeService(app.getService('databases', options.context))</span>
457
444
  <span class="cstat-no" title="statement not covered" >}</span>
458
445
  &nbsp;
446
+ export <span class="fstat-no" title="function not covered" >async function createOrganisationService (options = {}) {</span>
447
+ <span class="cstat-no" title="statement not covered" > const app = this</span>
448
+ <span class="cstat-no" title="statement not covered" ></span>
449
+ <span class="cstat-no" title="statement not covered" > // Create services to manage MongoDB databases, organisations, etc.</span>
450
+ <span class="cstat-no" title="statement not covered" > await createDatabasesService.call(app)</span>
451
+ <span class="cstat-no" title="statement not covered" > const orgsService = await app.createService('organisations', { modelsPath, servicesPath })</span>
452
+ <span class="cstat-no" title="statement not covered" ></span>
453
+ <span class="cstat-no" title="statement not covered" > // Replication management</span>
454
+ <span class="cstat-no" title="statement not covered" > const usersService = app.getService('users')</span>
455
+ <span class="cstat-no" title="statement not covered" > const authorisationsService = app.getService('authorisations')</span>
456
+ <span class="cstat-no" title="statement not covered" > // Ensure permissions are correctly distributed when replicated</span>
457
+ <span class="cstat-no" title="statement not covered" > usersService.on('patched', user =&gt; {</span>
458
+ <span class="cstat-no" title="statement not covered" > // Patching profile should not trigger abilities update since</span>
459
+ <span class="cstat-no" title="statement not covered" > // it is a perspective and permissions are not available in this case</span>
460
+ <span class="cstat-no" title="statement not covered" > // Updating abilities in this case will result in loosing permissions for orgs/groups as none are available</span>
461
+ <span class="cstat-no" title="statement not covered" > if (_.has(user, 'organisations') || _.has(user, 'groups')) authorisationsService.updateAbilities(user)</span>
462
+ <span class="cstat-no" title="statement not covered" > })</span>
463
+ <span class="cstat-no" title="statement not covered" > // Ensure org services are correctly distributed when replicated</span>
464
+ <span class="cstat-no" title="statement not covered" > orgsService.on('created', organisation =&gt; {</span>
465
+ <span class="cstat-no" title="statement not covered" > // Check if already done (initiator)</span>
466
+ <span class="cstat-no" title="statement not covered" > const orgMembersService = app.getService('members', organisation)</span>
467
+ <span class="cstat-no" title="statement not covered" > if (!orgMembersService) {</span>
468
+ <span class="cstat-no" title="statement not covered" > // Jump from infos/stats to real DB object</span>
469
+ <span class="cstat-no" title="statement not covered" > const db = app.db.client.db(organisation._id.toString())</span>
470
+ <span class="cstat-no" title="statement not covered" > orgsService.createOrganisationServices(organisation, db)</span>
471
+ <span class="cstat-no" title="statement not covered" > }</span>
472
+ <span class="cstat-no" title="statement not covered" > })</span>
473
+ <span class="cstat-no" title="statement not covered" > orgsService.on('removed', organisation =&gt; {</span>
474
+ <span class="cstat-no" title="statement not covered" > // Check if already done (initiator)</span>
475
+ <span class="cstat-no" title="statement not covered" > const orgMembersService = app.getService('members', organisation)</span>
476
+ <span class="cstat-no" title="statement not covered" > if (!orgMembersService) return</span>
477
+ <span class="cstat-no" title="statement not covered" > orgsService.removeOrganisationServices(organisation)</span>
478
+ <span class="cstat-no" title="statement not covered" > })</span>
479
+ <span class="cstat-no" title="statement not covered" > return orgsService</span>
480
+ <span class="cstat-no" title="statement not covered" >}</span>
481
+ &nbsp;
459
482
  export default async function () {
460
483
  const app = this
461
484
  &nbsp;
462
485
  const authConfig = app.get('authentication')
463
486
  if (authConfig) {
464
- await app.createService('users', {
465
- modelsPath,
466
- servicesPath,
467
- methods: ['create', 'get', 'find', 'update', 'patch', 'remove', 'logout'],
468
- events: ['logout']
469
- })
487
+ await app.createService('users', { modelsPath, servicesPath })
470
488
  debug('\'users\' service created')
471
489
  await app.createService('account', {
472
490
  servicesPath,
@@ -480,35 +498,41 @@ export default async function () {
480
498
  const storageConfig = app.get('storage')
481
499
  if (storageConfig) {
482
500
  await createStorageService.call(app)
483
- debug('\'storage\' service created')
484
- }
485
- &nbsp;
486
- const importExportConfig = app.get('import-export')
487
- if (importExportConfig) {
488
- await app.createService('import-export', {
489
- servicesPath,
490
- events: ['import-created', 'import-completed', 'export-created', 'export-completed']
491
- }, app)
492
- debug('\'import-export\' service created')
493
- }
494
- &nbsp;
495
- const messagesConfig = app.get('messages')
496
- if (messagesConfig) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
501
+ <span class="cstat-no" title="statement not covered" ><span class="branch-0 cbranch-no" title="branch not covered" > debug('\'storage\' service created')</span></span>
502
+ <span class="cstat-no" title="statement not covered" > }</span>
503
+ <span class="cstat-no" title="statement not covered" ></span>
504
+ <span class="cstat-no" title="statement not covered" > const importExportConfig = app.get('import-export')</span>
505
+ <span class="cstat-no" title="statement not covered" > if (importExportConfig) {</span>
506
+ <span class="cstat-no" title="statement not covered" > await app.createService('import-export', {</span>
507
+ <span class="cstat-no" title="statement not covered" > servicesPath,</span>
508
+ <span class="cstat-no" title="statement not covered" > events: ['import-created', 'import-completed', 'export-created', 'export-completed']</span>
509
+ <span class="cstat-no" title="statement not covered" > }, app)</span>
510
+ <span class="cstat-no" title="statement not covered" > debug('\'import-export\' service created')</span>
511
+ <span class="cstat-no" title="statement not covered" > }</span>
512
+ <span class="cstat-no" title="statement not covered" ></span>
513
+ <span class="cstat-no" title="statement not covered" > const messagesConfig = app.get('messages')</span>
514
+ <span class="cstat-no" title="statement not covered" > if (messagesConfig) {</span>
497
515
  <span class="cstat-no" title="statement not covered" > await createMessagesService.call(app)</span>
498
516
  <span class="cstat-no" title="statement not covered" > debug('\'messages\' service created')</span>
499
517
  <span class="cstat-no" title="statement not covered" > }</span>
500
- &nbsp;
501
- const mailerConfig = app.get('mailer')
502
- if (mailerConfig) {
503
- await app.createService('mailer', { servicesPath })
504
- debug('\'mailer\' service created')
505
- }
506
- &nbsp;
507
- const pushConfig = app.get('push')
508
- if (pushConfig) {
509
- await app.createService('push', { servicesPath })
510
- debug('\'push\' service created')
511
- }
518
+ <span class="cstat-no" title="statement not covered" ></span>
519
+ <span class="cstat-no" title="statement not covered" > const orgConfig = app.get('organisations')</span>
520
+ <span class="cstat-no" title="statement not covered" > if (orgConfig) {</span>
521
+ <span class="cstat-no" title="statement not covered" > await createOrganisationService.call(app)</span>
522
+ <span class="cstat-no" title="statement not covered" > debug('\'organisations\' service created')</span>
523
+ <span class="cstat-no" title="statement not covered" > }</span>
524
+ <span class="cstat-no" title="statement not covered" ></span>
525
+ <span class="cstat-no" title="statement not covered" > const mailerConfig = app.get('mailer')</span>
526
+ <span class="cstat-no" title="statement not covered" > if (mailerConfig) {</span>
527
+ <span class="cstat-no" title="statement not covered" > await app.createService('mailer', { servicesPath })</span>
528
+ <span class="cstat-no" title="statement not covered" > debug('\'mailer\' service created')</span>
529
+ <span class="cstat-no" title="statement not covered" > }</span>
530
+ <span class="cstat-no" title="statement not covered" ></span>
531
+ <span class="cstat-no" title="statement not covered" > const pushConfig = app.get('push')</span>
532
+ <span class="cstat-no" title="statement not covered" > if (pushConfig) {</span>
533
+ <span class="cstat-no" title="statement not covered" > await app.createService('push', { servicesPath })</span>
534
+ <span class="cstat-no" title="statement not covered" > debug('\'push\' service created')</span>
535
+ <span class="cstat-no" title="statement not covered" > }</span>
512
536
  }
513
537
  &nbsp;</pre></td></tr></table></pre>
514
538
 
@@ -517,7 +541,7 @@ export default async function () {
517
541
  <div class='footer quiet pad2 space-top1 center small'>
518
542
  Code coverage generated by
519
543
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
520
- at 2025-07-24T10:00:20.476Z
544
+ at 2024-08-13T10:02:04.843Z
521
545
  </div>
522
546
  <script src="../../../prettify.js"></script>
523
547
  <script>