@kalisio/kdk 2.2.2 → 2.3.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 (386) hide show
  1. package/.eslintignore +1 -0
  2. package/.github/workflows/main.yaml +67 -0
  3. package/.gitmodules +3 -0
  4. package/README.md +1 -2
  5. package/core/api/hooks/hooks.query.js +15 -2
  6. package/core/api/marshall.js +35 -4
  7. package/core/client/api.js +1 -1
  8. package/core/client/components/KActivity.vue +73 -0
  9. package/core/client/components/KContent.vue +1 -1
  10. package/core/client/components/KSponsor.vue +2 -13
  11. package/core/client/components/account/KDeleteAccountManager.vue +1 -1
  12. package/core/client/components/account/KPasswordManager.vue +1 -1
  13. package/core/client/components/action/KAction.vue +294 -0
  14. package/core/client/components/action/KBugReportAction.vue +37 -0
  15. package/core/client/components/action/index.js +7 -0
  16. package/core/client/components/app/KAbout.vue +16 -63
  17. package/core/client/components/app/KPlatform.vue +1 -1
  18. package/core/client/components/app/KSettings.vue +14 -14
  19. package/core/client/components/app/KTour.vue +6 -8
  20. package/core/client/components/app/KWelcome.vue +1 -1
  21. package/core/client/components/app/index.js +4 -0
  22. package/core/client/components/chart/KDataTable.vue +40 -25
  23. package/core/client/components/chart/KTimeSeriesChart.vue +20 -12
  24. package/core/client/components/collection/KCard.vue +1 -1
  25. package/core/client/components/collection/KColumn.vue +1 -1
  26. package/core/client/components/collection/KFilter.vue +6 -1
  27. package/core/client/components/document/KDocument.vue +83 -0
  28. package/core/client/components/document/KHtml.vue +23 -0
  29. package/core/client/components/document/KMarkdown.vue +37 -0
  30. package/core/client/components/document/index.js +9 -0
  31. package/core/client/components/form/KForm.vue +5 -1
  32. package/core/client/components/form/KSelectField.vue +1 -1
  33. package/core/client/components/index.js +1 -4
  34. package/core/client/components/input/KOptionsChooser.vue +1 -1
  35. package/core/client/components/layout/KFab.vue +1 -1
  36. package/core/client/components/layout/KPage.vue +3 -2
  37. package/core/client/components/layout/KWindow.vue +1 -1
  38. package/core/client/components/media/KColorScale.vue +16 -6
  39. package/core/client/components/screen/KLoginScreen.vue +1 -1
  40. package/core/client/components/screen/KRegisterScreen.vue +1 -1
  41. package/core/client/components/team/KAddMember.vue +7 -7
  42. package/core/client/components/team/KGroupCard.vue +1 -1
  43. package/core/client/components/team/KMemberFilter.vue +1 -1
  44. package/core/client/components/team/KTagCard.vue +1 -1
  45. package/core/client/components/time/KRelativeTimeRanges.vue +1 -1
  46. package/core/client/components/time/KTimeControl.vue +1 -0
  47. package/core/client/components/tool/KExportTool.vue +1 -1
  48. package/core/client/composables/collection.js +1 -1
  49. package/core/client/composables/index.js +1 -0
  50. package/core/client/composables/layout.js +50 -0
  51. package/core/client/composables/session.js +6 -0
  52. package/core/client/filter.js +9 -6
  53. package/core/client/guards.js +29 -6
  54. package/core/client/i18n/core_en.json +1 -1
  55. package/core/client/i18n/core_fr.json +1 -1
  56. package/core/client/i18n.js +14 -0
  57. package/core/client/layout.js +25 -14
  58. package/core/client/mixins/mixin.base-activity.js +16 -0
  59. package/core/client/services/index.js +27 -26
  60. package/core/client/services/local-settings.service.js +2 -3
  61. package/core/client/units.js +6 -1
  62. package/core/client/utils/index.js +3 -0
  63. package/core/client/utils/utils.actions.js +93 -0
  64. package/core/client/utils/utils.colors.js +1 -1
  65. package/core/client/utils/utils.data.js +22 -0
  66. package/core/client/utils/utils.shapes.js +16 -6
  67. package/coverage/base.css +224 -0
  68. package/coverage/block-navigation.js +87 -0
  69. package/coverage/core/api/application.js.html +1870 -0
  70. package/coverage/core/api/authentication.js.html +742 -0
  71. package/coverage/core/api/db.js.html +778 -0
  72. package/coverage/core/api/hooks/hooks.authentication.js.html +313 -0
  73. package/coverage/core/api/hooks/hooks.authorisations.js.html +1243 -0
  74. package/coverage/core/api/hooks/hooks.groups.js.html +229 -0
  75. package/coverage/core/api/hooks/hooks.logger.js.html +163 -0
  76. package/coverage/core/api/hooks/hooks.model.js.html +955 -0
  77. package/coverage/core/api/hooks/hooks.organisations.js.html +541 -0
  78. package/coverage/core/api/hooks/hooks.push.js.html +253 -0
  79. package/coverage/core/api/hooks/hooks.query.js.html +862 -0
  80. package/coverage/core/api/hooks/hooks.schemas.js.html +304 -0
  81. package/coverage/core/api/hooks/hooks.service.js.html +319 -0
  82. package/coverage/core/api/hooks/hooks.storage.js.html +193 -0
  83. package/coverage/core/api/hooks/hooks.users.js.html +868 -0
  84. package/coverage/core/api/hooks/index.html +296 -0
  85. package/coverage/core/api/hooks/index.js.html +121 -0
  86. package/coverage/core/api/index.html +191 -0
  87. package/coverage/core/api/index.js.html +148 -0
  88. package/coverage/core/api/marshall.js.html +448 -0
  89. package/coverage/core/api/models/groups.model.mongodb.js.html +109 -0
  90. package/coverage/core/api/models/index.html +161 -0
  91. package/coverage/core/api/models/organisations.model.mongodb.js.html +94 -0
  92. package/coverage/core/api/models/tags.model.mongodb.js.html +115 -0
  93. package/coverage/core/api/models/users.model.mongodb.js.html +115 -0
  94. package/coverage/core/api/services/account/account.hooks.js.html +208 -0
  95. package/coverage/core/api/services/account/account.service.js.html +436 -0
  96. package/coverage/core/api/services/account/index.html +131 -0
  97. package/coverage/core/api/services/authorisations/authorisations.hooks.js.html +184 -0
  98. package/coverage/core/api/services/authorisations/authorisations.service.js.html +502 -0
  99. package/coverage/core/api/services/authorisations/index.html +131 -0
  100. package/coverage/core/api/services/databases/databases.hooks.js.html +193 -0
  101. package/coverage/core/api/services/databases/databases.service.js.html +100 -0
  102. package/coverage/core/api/services/databases/index.html +131 -0
  103. package/coverage/core/api/services/groups/groups.hooks.js.html +178 -0
  104. package/coverage/core/api/services/groups/index.html +116 -0
  105. package/coverage/core/api/services/import-export/import-export.hooks.js.html +184 -0
  106. package/coverage/core/api/services/import-export/import-export.service.js.html +118 -0
  107. package/coverage/core/api/services/import-export/index.html +131 -0
  108. package/coverage/core/api/services/index.html +116 -0
  109. package/coverage/core/api/services/index.js.html +499 -0
  110. package/coverage/core/api/services/mailer/index.html +131 -0
  111. package/coverage/core/api/services/mailer/mailer.hooks.js.html +190 -0
  112. package/coverage/core/api/services/mailer/mailer.service.js.html +118 -0
  113. package/coverage/core/api/services/organisations/index.html +131 -0
  114. package/coverage/core/api/services/organisations/organisations.hooks.js.html +178 -0
  115. package/coverage/core/api/services/organisations/organisations.service.js.html +343 -0
  116. package/coverage/core/api/services/push/index.html +131 -0
  117. package/coverage/core/api/services/push/push.hooks.js.html +190 -0
  118. package/coverage/core/api/services/push/push.service.js.html +121 -0
  119. package/coverage/core/api/services/storage/index.html +131 -0
  120. package/coverage/core/api/services/storage/storage.hooks.js.html +190 -0
  121. package/coverage/core/api/services/storage/storage.service.js.html +172 -0
  122. package/coverage/core/api/services/tags/index.html +116 -0
  123. package/coverage/core/api/services/tags/tags.hooks.js.html +178 -0
  124. package/coverage/core/api/services/users/index.html +116 -0
  125. package/coverage/core/api/services/users/users.hooks.js.html +307 -0
  126. package/coverage/core/api/utils.js.html +118 -0
  127. package/coverage/core/common/errors.js.html +88 -0
  128. package/coverage/core/common/index.html +176 -0
  129. package/coverage/core/common/index.js.html +115 -0
  130. package/coverage/core/common/permissions.js.html +1048 -0
  131. package/coverage/core/common/schema.js.html +190 -0
  132. package/coverage/core/common/utils.js.html +220 -0
  133. package/coverage/favicon.png +0 -0
  134. package/coverage/index.html +491 -0
  135. package/coverage/lcov-report/base.css +224 -0
  136. package/coverage/lcov-report/block-navigation.js +87 -0
  137. package/coverage/lcov-report/core/api/application.js.html +1870 -0
  138. package/coverage/lcov-report/core/api/authentication.js.html +742 -0
  139. package/coverage/lcov-report/core/api/db.js.html +778 -0
  140. package/coverage/lcov-report/core/api/hooks/hooks.authentication.js.html +313 -0
  141. package/coverage/lcov-report/core/api/hooks/hooks.authorisations.js.html +1243 -0
  142. package/coverage/lcov-report/core/api/hooks/hooks.groups.js.html +229 -0
  143. package/coverage/lcov-report/core/api/hooks/hooks.logger.js.html +163 -0
  144. package/coverage/lcov-report/core/api/hooks/hooks.model.js.html +955 -0
  145. package/coverage/lcov-report/core/api/hooks/hooks.organisations.js.html +541 -0
  146. package/coverage/lcov-report/core/api/hooks/hooks.push.js.html +253 -0
  147. package/coverage/lcov-report/core/api/hooks/hooks.query.js.html +862 -0
  148. package/coverage/lcov-report/core/api/hooks/hooks.schemas.js.html +304 -0
  149. package/coverage/lcov-report/core/api/hooks/hooks.service.js.html +319 -0
  150. package/coverage/lcov-report/core/api/hooks/hooks.storage.js.html +193 -0
  151. package/coverage/lcov-report/core/api/hooks/hooks.users.js.html +868 -0
  152. package/coverage/lcov-report/core/api/hooks/index.html +296 -0
  153. package/coverage/lcov-report/core/api/hooks/index.js.html +121 -0
  154. package/coverage/lcov-report/core/api/index.html +191 -0
  155. package/coverage/lcov-report/core/api/index.js.html +148 -0
  156. package/coverage/lcov-report/core/api/marshall.js.html +448 -0
  157. package/coverage/lcov-report/core/api/models/groups.model.mongodb.js.html +109 -0
  158. package/coverage/lcov-report/core/api/models/index.html +161 -0
  159. package/coverage/lcov-report/core/api/models/organisations.model.mongodb.js.html +94 -0
  160. package/coverage/lcov-report/core/api/models/tags.model.mongodb.js.html +115 -0
  161. package/coverage/lcov-report/core/api/models/users.model.mongodb.js.html +115 -0
  162. package/coverage/lcov-report/core/api/services/account/account.hooks.js.html +208 -0
  163. package/coverage/lcov-report/core/api/services/account/account.service.js.html +436 -0
  164. package/coverage/lcov-report/core/api/services/account/index.html +131 -0
  165. package/coverage/lcov-report/core/api/services/authorisations/authorisations.hooks.js.html +184 -0
  166. package/coverage/lcov-report/core/api/services/authorisations/authorisations.service.js.html +502 -0
  167. package/coverage/lcov-report/core/api/services/authorisations/index.html +131 -0
  168. package/coverage/lcov-report/core/api/services/databases/databases.hooks.js.html +193 -0
  169. package/coverage/lcov-report/core/api/services/databases/databases.service.js.html +100 -0
  170. package/coverage/lcov-report/core/api/services/databases/index.html +131 -0
  171. package/coverage/lcov-report/core/api/services/groups/groups.hooks.js.html +178 -0
  172. package/coverage/lcov-report/core/api/services/groups/index.html +116 -0
  173. package/coverage/lcov-report/core/api/services/import-export/import-export.hooks.js.html +184 -0
  174. package/coverage/lcov-report/core/api/services/import-export/import-export.service.js.html +118 -0
  175. package/coverage/lcov-report/core/api/services/import-export/index.html +131 -0
  176. package/coverage/lcov-report/core/api/services/index.html +116 -0
  177. package/coverage/lcov-report/core/api/services/index.js.html +499 -0
  178. package/coverage/lcov-report/core/api/services/mailer/index.html +131 -0
  179. package/coverage/lcov-report/core/api/services/mailer/mailer.hooks.js.html +190 -0
  180. package/coverage/lcov-report/core/api/services/mailer/mailer.service.js.html +118 -0
  181. package/coverage/lcov-report/core/api/services/organisations/index.html +131 -0
  182. package/coverage/lcov-report/core/api/services/organisations/organisations.hooks.js.html +178 -0
  183. package/coverage/lcov-report/core/api/services/organisations/organisations.service.js.html +343 -0
  184. package/coverage/lcov-report/core/api/services/push/index.html +131 -0
  185. package/coverage/lcov-report/core/api/services/push/push.hooks.js.html +190 -0
  186. package/coverage/lcov-report/core/api/services/push/push.service.js.html +121 -0
  187. package/coverage/lcov-report/core/api/services/storage/index.html +131 -0
  188. package/coverage/lcov-report/core/api/services/storage/storage.hooks.js.html +190 -0
  189. package/coverage/lcov-report/core/api/services/storage/storage.service.js.html +172 -0
  190. package/coverage/lcov-report/core/api/services/tags/index.html +116 -0
  191. package/coverage/lcov-report/core/api/services/tags/tags.hooks.js.html +178 -0
  192. package/coverage/lcov-report/core/api/services/users/index.html +116 -0
  193. package/coverage/lcov-report/core/api/services/users/users.hooks.js.html +307 -0
  194. package/coverage/lcov-report/core/api/utils.js.html +118 -0
  195. package/coverage/lcov-report/core/common/errors.js.html +88 -0
  196. package/coverage/lcov-report/core/common/index.html +176 -0
  197. package/coverage/lcov-report/core/common/index.js.html +115 -0
  198. package/coverage/lcov-report/core/common/permissions.js.html +1048 -0
  199. package/coverage/lcov-report/core/common/schema.js.html +190 -0
  200. package/coverage/lcov-report/core/common/utils.js.html +220 -0
  201. package/coverage/lcov-report/favicon.png +0 -0
  202. package/coverage/lcov-report/index.html +491 -0
  203. package/coverage/lcov-report/map/api/hooks/hooks.catalog.js.html +457 -0
  204. package/coverage/lcov-report/map/api/hooks/hooks.features.js.html +397 -0
  205. package/coverage/lcov-report/map/api/hooks/hooks.query.js.html +1309 -0
  206. package/coverage/lcov-report/map/api/hooks/index.html +161 -0
  207. package/coverage/lcov-report/map/api/hooks/index.js.html +94 -0
  208. package/coverage/lcov-report/map/api/index.html +131 -0
  209. package/coverage/lcov-report/map/api/index.js.html +139 -0
  210. package/coverage/lcov-report/map/api/marshall.js.html +178 -0
  211. package/coverage/lcov-report/map/api/models/alerts.model.mongodb.js.html +106 -0
  212. package/coverage/lcov-report/map/api/models/catalog.model.mongodb.js.html +127 -0
  213. package/coverage/lcov-report/map/api/models/features.model.mongodb.js.html +196 -0
  214. package/coverage/lcov-report/map/api/models/index.html +161 -0
  215. package/coverage/lcov-report/map/api/models/projects.model.mongodb.js.html +109 -0
  216. package/coverage/lcov-report/map/api/services/alerts/alerts.hooks.js.html +274 -0
  217. package/coverage/lcov-report/map/api/services/alerts/alerts.service.js.html +610 -0
  218. package/coverage/lcov-report/map/api/services/alerts/index.html +131 -0
  219. package/coverage/lcov-report/map/api/services/catalog/catalog.hooks.js.html +316 -0
  220. package/coverage/lcov-report/map/api/services/catalog/index.html +116 -0
  221. package/coverage/lcov-report/map/api/services/daptiles/daptiles.service.js.html +1510 -0
  222. package/coverage/lcov-report/map/api/services/daptiles/index.html +116 -0
  223. package/coverage/lcov-report/map/api/services/features/features.hooks.js.html +241 -0
  224. package/coverage/lcov-report/map/api/services/features/features.service.js.html +241 -0
  225. package/coverage/lcov-report/map/api/services/features/index.html +131 -0
  226. package/coverage/lcov-report/map/api/services/index.html +116 -0
  227. package/coverage/lcov-report/map/api/services/index.js.html +817 -0
  228. package/coverage/lcov-report/map/api/services/projects/index.html +116 -0
  229. package/coverage/lcov-report/map/api/services/projects/projects.hooks.js.html +439 -0
  230. package/coverage/lcov-report/map/common/dynamic-grid-source.js.html +466 -0
  231. package/coverage/lcov-report/map/common/errors.js.html +94 -0
  232. package/coverage/lcov-report/map/common/geotiff-grid-source.js.html +541 -0
  233. package/coverage/lcov-report/map/common/grid.js.html +1612 -0
  234. package/coverage/lcov-report/map/common/index.html +371 -0
  235. package/coverage/lcov-report/map/common/index.js.html +172 -0
  236. package/coverage/lcov-report/map/common/meteo-model-grid-source.js.html +556 -0
  237. package/coverage/lcov-report/map/common/moment-utils.js.html +157 -0
  238. package/coverage/lcov-report/map/common/opendap-grid-source.js.html +868 -0
  239. package/coverage/lcov-report/map/common/opendap-utils.js.html +826 -0
  240. package/coverage/lcov-report/map/common/permissions.js.html +124 -0
  241. package/coverage/lcov-report/map/common/time-based-grid-source.js.html +418 -0
  242. package/coverage/lcov-report/map/common/tms-utils.js.html +274 -0
  243. package/coverage/lcov-report/map/common/wcs-grid-source.js.html +364 -0
  244. package/coverage/lcov-report/map/common/wcs-utils.js.html +586 -0
  245. package/coverage/lcov-report/map/common/weacast-grid-source.js.html +1033 -0
  246. package/coverage/lcov-report/map/common/wfs-utils.js.html +574 -0
  247. package/coverage/lcov-report/map/common/wms-utils.js.html +451 -0
  248. package/coverage/lcov-report/map/common/wmts-utils.js.html +547 -0
  249. package/coverage/lcov-report/prettify.css +1 -0
  250. package/coverage/lcov-report/prettify.js +2 -0
  251. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  252. package/coverage/lcov-report/sorter.js +196 -0
  253. package/coverage/lcov.info +11128 -0
  254. package/coverage/map/api/hooks/hooks.catalog.js.html +457 -0
  255. package/coverage/map/api/hooks/hooks.features.js.html +397 -0
  256. package/coverage/map/api/hooks/hooks.query.js.html +1309 -0
  257. package/coverage/map/api/hooks/index.html +161 -0
  258. package/coverage/map/api/hooks/index.js.html +94 -0
  259. package/coverage/map/api/index.html +131 -0
  260. package/coverage/map/api/index.js.html +139 -0
  261. package/coverage/map/api/marshall.js.html +178 -0
  262. package/coverage/map/api/models/alerts.model.mongodb.js.html +106 -0
  263. package/coverage/map/api/models/catalog.model.mongodb.js.html +127 -0
  264. package/coverage/map/api/models/features.model.mongodb.js.html +196 -0
  265. package/coverage/map/api/models/index.html +161 -0
  266. package/coverage/map/api/models/projects.model.mongodb.js.html +109 -0
  267. package/coverage/map/api/services/alerts/alerts.hooks.js.html +274 -0
  268. package/coverage/map/api/services/alerts/alerts.service.js.html +610 -0
  269. package/coverage/map/api/services/alerts/index.html +131 -0
  270. package/coverage/map/api/services/catalog/catalog.hooks.js.html +316 -0
  271. package/coverage/map/api/services/catalog/index.html +116 -0
  272. package/coverage/map/api/services/daptiles/daptiles.service.js.html +1510 -0
  273. package/coverage/map/api/services/daptiles/index.html +116 -0
  274. package/coverage/map/api/services/features/features.hooks.js.html +241 -0
  275. package/coverage/map/api/services/features/features.service.js.html +241 -0
  276. package/coverage/map/api/services/features/index.html +131 -0
  277. package/coverage/map/api/services/index.html +116 -0
  278. package/coverage/map/api/services/index.js.html +817 -0
  279. package/coverage/map/api/services/projects/index.html +116 -0
  280. package/coverage/map/api/services/projects/projects.hooks.js.html +439 -0
  281. package/coverage/map/common/dynamic-grid-source.js.html +466 -0
  282. package/coverage/map/common/errors.js.html +94 -0
  283. package/coverage/map/common/geotiff-grid-source.js.html +541 -0
  284. package/coverage/map/common/grid.js.html +1612 -0
  285. package/coverage/map/common/index.html +371 -0
  286. package/coverage/map/common/index.js.html +172 -0
  287. package/coverage/map/common/meteo-model-grid-source.js.html +556 -0
  288. package/coverage/map/common/moment-utils.js.html +157 -0
  289. package/coverage/map/common/opendap-grid-source.js.html +868 -0
  290. package/coverage/map/common/opendap-utils.js.html +826 -0
  291. package/coverage/map/common/permissions.js.html +124 -0
  292. package/coverage/map/common/time-based-grid-source.js.html +418 -0
  293. package/coverage/map/common/tms-utils.js.html +274 -0
  294. package/coverage/map/common/wcs-grid-source.js.html +364 -0
  295. package/coverage/map/common/wcs-utils.js.html +586 -0
  296. package/coverage/map/common/weacast-grid-source.js.html +1033 -0
  297. package/coverage/map/common/wfs-utils.js.html +574 -0
  298. package/coverage/map/common/wms-utils.js.html +451 -0
  299. package/coverage/map/common/wmts-utils.js.html +547 -0
  300. package/coverage/prettify.css +1 -0
  301. package/coverage/prettify.js +2 -0
  302. package/coverage/sort-arrow-sprite.png +0 -0
  303. package/coverage/sorter.js +196 -0
  304. package/coverage/tmp/coverage-137435-1719398750767-0.json +1 -0
  305. package/coverage/tmp/coverage-137447-1719398750752-0.json +1 -0
  306. package/coverage/tmp/coverage-137458-1719398750740-0.json +1 -0
  307. package/coverage/tmp/coverage-137470-1719398750728-0.json +1 -0
  308. package/coverage/tmp/coverage-137477-1719398750691-0.json +1 -0
  309. package/map/api/hooks/hooks.query.js +5 -2
  310. package/map/api/services/catalog/catalog.hooks.js +4 -5
  311. package/map/client/cesium/utils/index.js +2 -1
  312. package/map/client/cesium/utils/utils.cesium.js +8 -0
  313. package/map/client/cesium/utils/utils.features.js +2 -2
  314. package/map/client/cesium/utils/utils.style.js +19 -17
  315. package/map/client/components/KCompass.vue +25 -3
  316. package/map/client/components/KEditLayerData.vue +1 -1
  317. package/map/client/components/KPositionIndicator.vue +1 -1
  318. package/map/client/components/catalog/KConnectLayer.vue +2 -2
  319. package/map/client/components/catalog/KCreateView.vue +2 -2
  320. package/map/client/components/form/KDirectionField.vue +4 -0
  321. package/map/client/components/form/KOwsLayerField.vue +4 -4
  322. package/map/client/components/form/KOwsServiceField.vue +3 -4
  323. package/map/client/components/legend/KLegend.vue +13 -15
  324. package/map/client/components/tools/KGeolocateTool.vue +1 -1
  325. package/map/client/components/widget/KStackableTimeSeries.vue +3 -0
  326. package/map/client/composables/highlight.js +4 -1
  327. package/map/client/elevation-utils.js +2 -2
  328. package/map/client/i18n/map_en.json +3 -1
  329. package/map/client/i18n/map_fr.json +3 -1
  330. package/map/client/mixins/globe/mixin.base-globe.js +121 -80
  331. package/map/client/mixins/globe/mixin.file-layers.js +2 -2
  332. package/map/client/mixins/globe/mixin.geojson-layers.js +24 -19
  333. package/map/client/mixins/globe/mixin.globe-activity.js +3 -3
  334. package/map/client/mixins/globe/mixin.opendap-layers.js +3 -3
  335. package/map/client/mixins/globe/mixin.style.js +5 -5
  336. package/map/client/mixins/globe/mixin.tooltip.js +5 -3
  337. package/map/client/mixins/map/mixin.base-map.js +42 -4
  338. package/map/client/mixins/map/mixin.canvas-layers.js +0 -1
  339. package/map/client/mixins/map/mixin.geojson-layers.js +10 -5
  340. package/map/client/mixins/mixin.activity.js +2 -2
  341. package/map/client/mixins/mixin.feature-selection.js +7 -5
  342. package/map/client/mixins/mixin.levels.js +1 -1
  343. package/map/client/utils/utils.catalog.js +15 -0
  344. package/map/client/utils/utils.location.js +2 -1
  345. package/map/client/utils/utils.style.js +1 -1
  346. package/map/common/geotiff-grid-source.js +5 -3
  347. package/map/common/grid.js +2 -2
  348. package/map/common/meteo-model-grid-source.js +1 -1
  349. package/map/common/time-based-grid-source.js +1 -1
  350. package/map/common/wmts-utils.js +11 -11
  351. package/package.json +12 -8
  352. package/scripts/build_docs.sh +37 -0
  353. package/scripts/init_runner.sh +30 -0
  354. package/scripts/kash/.github/workflows/run_tests.yaml +33 -0
  355. package/scripts/kash/README.md +2 -0
  356. package/scripts/kash/kash.sh +1657 -0
  357. package/scripts/kash/scripts/run_tests.sh +151 -0
  358. package/scripts/run_tests.sh +48 -0
  359. package/scripts/setup_workspace.sh +42 -0
  360. package/test/api/core/hooks.test.js +31 -0
  361. package/test/api/core/test-log-2023-12-19.log +7 -0
  362. package/test/api/core/test-log-2024-01-04.log +14 -0
  363. package/test/api/core/test-log-2024-05-14.log +6 -0
  364. package/test/api/core/test-log-2024-06-06.log +23 -0
  365. package/test/api/core/test-log-2024-06-26.log +25 -0
  366. package/test/api/map/grid-sources.test.js +3 -1
  367. package/test/api/map/hooks.test.js +58 -12
  368. package/test/api/map/test-log-2023-11-24.log +121 -0
  369. package/test/api/map/test-log-2023-12-12.log +29 -0
  370. package/test/api/map/test-log-2023-12-13.log +5 -0
  371. package/test/api/map/test-log-2024-01-04.log +2 -0
  372. package/test/api/map/test-log-2024-01-11.log +1 -0
  373. package/test/api/map/test-log-2024-01-25.log +19 -0
  374. package/test/api/map/test-log-2024-06-06.log +39 -0
  375. package/test/client/core/collection.js +2 -2
  376. package/test/client/core/dialogs.js +13 -0
  377. package/test/client/core/index.js +6 -5
  378. package/test/client/core/layout.js +1 -13
  379. package/test/client/core/runner.js +41 -20
  380. package/test/client/core/screens.js +6 -0
  381. package/test/client/core/utils.js +23 -19
  382. package/.travis.doc.sh +0 -8
  383. package/.travis.test.sh +0 -72
  384. package/core/client/components/KAction.vue +0 -393
  385. package/core/client/components/KBlock.vue +0 -67
  386. package/core/client/components/app/KTerms.vue +0 -41
@@ -0,0 +1,778 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for core/api/db.js</title>
7
+ <meta charset="utf-8" />
8
+ <link rel="stylesheet" href="../../prettify.css" />
9
+ <link rel="stylesheet" href="../../base.css" />
10
+ <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
11
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
12
+ <style type='text/css'>
13
+ .coverage-summary .sorter {
14
+ background-image: url(../../sort-arrow-sprite.png);
15
+ }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <div class='wrapper'>
21
+ <div class='pad1'>
22
+ <h1><a href="../../index.html">All files</a> / <a href="index.html">core/api</a> db.js</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">83.54% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>193/231</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">67.79% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>40/59</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">80.95% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>17/21</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">83.54% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>193/231</span>
50
+ </div>
51
+
52
+
53
+ </div>
54
+ <p class="quiet">
55
+ Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
+ </p>
57
+ <template id="filterTemplate">
58
+ <div class="quiet">
59
+ Filter:
60
+ <input oninput="onInput()" type="search" id="fileSearch">
61
+ </div>
62
+ </template>
63
+ </div>
64
+ <div class='status-line high'></div>
65
+ <pre><table class="coverage">
66
+ <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
+ <a name='L2'></a><a href='#L2'>2</a>
68
+ <a name='L3'></a><a href='#L3'>3</a>
69
+ <a name='L4'></a><a href='#L4'>4</a>
70
+ <a name='L5'></a><a href='#L5'>5</a>
71
+ <a name='L6'></a><a href='#L6'>6</a>
72
+ <a name='L7'></a><a href='#L7'>7</a>
73
+ <a name='L8'></a><a href='#L8'>8</a>
74
+ <a name='L9'></a><a href='#L9'>9</a>
75
+ <a name='L10'></a><a href='#L10'>10</a>
76
+ <a name='L11'></a><a href='#L11'>11</a>
77
+ <a name='L12'></a><a href='#L12'>12</a>
78
+ <a name='L13'></a><a href='#L13'>13</a>
79
+ <a name='L14'></a><a href='#L14'>14</a>
80
+ <a name='L15'></a><a href='#L15'>15</a>
81
+ <a name='L16'></a><a href='#L16'>16</a>
82
+ <a name='L17'></a><a href='#L17'>17</a>
83
+ <a name='L18'></a><a href='#L18'>18</a>
84
+ <a name='L19'></a><a href='#L19'>19</a>
85
+ <a name='L20'></a><a href='#L20'>20</a>
86
+ <a name='L21'></a><a href='#L21'>21</a>
87
+ <a name='L22'></a><a href='#L22'>22</a>
88
+ <a name='L23'></a><a href='#L23'>23</a>
89
+ <a name='L24'></a><a href='#L24'>24</a>
90
+ <a name='L25'></a><a href='#L25'>25</a>
91
+ <a name='L26'></a><a href='#L26'>26</a>
92
+ <a name='L27'></a><a href='#L27'>27</a>
93
+ <a name='L28'></a><a href='#L28'>28</a>
94
+ <a name='L29'></a><a href='#L29'>29</a>
95
+ <a name='L30'></a><a href='#L30'>30</a>
96
+ <a name='L31'></a><a href='#L31'>31</a>
97
+ <a name='L32'></a><a href='#L32'>32</a>
98
+ <a name='L33'></a><a href='#L33'>33</a>
99
+ <a name='L34'></a><a href='#L34'>34</a>
100
+ <a name='L35'></a><a href='#L35'>35</a>
101
+ <a name='L36'></a><a href='#L36'>36</a>
102
+ <a name='L37'></a><a href='#L37'>37</a>
103
+ <a name='L38'></a><a href='#L38'>38</a>
104
+ <a name='L39'></a><a href='#L39'>39</a>
105
+ <a name='L40'></a><a href='#L40'>40</a>
106
+ <a name='L41'></a><a href='#L41'>41</a>
107
+ <a name='L42'></a><a href='#L42'>42</a>
108
+ <a name='L43'></a><a href='#L43'>43</a>
109
+ <a name='L44'></a><a href='#L44'>44</a>
110
+ <a name='L45'></a><a href='#L45'>45</a>
111
+ <a name='L46'></a><a href='#L46'>46</a>
112
+ <a name='L47'></a><a href='#L47'>47</a>
113
+ <a name='L48'></a><a href='#L48'>48</a>
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>
123
+ <a name='L58'></a><a href='#L58'>58</a>
124
+ <a name='L59'></a><a href='#L59'>59</a>
125
+ <a name='L60'></a><a href='#L60'>60</a>
126
+ <a name='L61'></a><a href='#L61'>61</a>
127
+ <a name='L62'></a><a href='#L62'>62</a>
128
+ <a name='L63'></a><a href='#L63'>63</a>
129
+ <a name='L64'></a><a href='#L64'>64</a>
130
+ <a name='L65'></a><a href='#L65'>65</a>
131
+ <a name='L66'></a><a href='#L66'>66</a>
132
+ <a name='L67'></a><a href='#L67'>67</a>
133
+ <a name='L68'></a><a href='#L68'>68</a>
134
+ <a name='L69'></a><a href='#L69'>69</a>
135
+ <a name='L70'></a><a href='#L70'>70</a>
136
+ <a name='L71'></a><a href='#L71'>71</a>
137
+ <a name='L72'></a><a href='#L72'>72</a>
138
+ <a name='L73'></a><a href='#L73'>73</a>
139
+ <a name='L74'></a><a href='#L74'>74</a>
140
+ <a name='L75'></a><a href='#L75'>75</a>
141
+ <a name='L76'></a><a href='#L76'>76</a>
142
+ <a name='L77'></a><a href='#L77'>77</a>
143
+ <a name='L78'></a><a href='#L78'>78</a>
144
+ <a name='L79'></a><a href='#L79'>79</a>
145
+ <a name='L80'></a><a href='#L80'>80</a>
146
+ <a name='L81'></a><a href='#L81'>81</a>
147
+ <a name='L82'></a><a href='#L82'>82</a>
148
+ <a name='L83'></a><a href='#L83'>83</a>
149
+ <a name='L84'></a><a href='#L84'>84</a>
150
+ <a name='L85'></a><a href='#L85'>85</a>
151
+ <a name='L86'></a><a href='#L86'>86</a>
152
+ <a name='L87'></a><a href='#L87'>87</a>
153
+ <a name='L88'></a><a href='#L88'>88</a>
154
+ <a name='L89'></a><a href='#L89'>89</a>
155
+ <a name='L90'></a><a href='#L90'>90</a>
156
+ <a name='L91'></a><a href='#L91'>91</a>
157
+ <a name='L92'></a><a href='#L92'>92</a>
158
+ <a name='L93'></a><a href='#L93'>93</a>
159
+ <a name='L94'></a><a href='#L94'>94</a>
160
+ <a name='L95'></a><a href='#L95'>95</a>
161
+ <a name='L96'></a><a href='#L96'>96</a>
162
+ <a name='L97'></a><a href='#L97'>97</a>
163
+ <a name='L98'></a><a href='#L98'>98</a>
164
+ <a name='L99'></a><a href='#L99'>99</a>
165
+ <a name='L100'></a><a href='#L100'>100</a>
166
+ <a name='L101'></a><a href='#L101'>101</a>
167
+ <a name='L102'></a><a href='#L102'>102</a>
168
+ <a name='L103'></a><a href='#L103'>103</a>
169
+ <a name='L104'></a><a href='#L104'>104</a>
170
+ <a name='L105'></a><a href='#L105'>105</a>
171
+ <a name='L106'></a><a href='#L106'>106</a>
172
+ <a name='L107'></a><a href='#L107'>107</a>
173
+ <a name='L108'></a><a href='#L108'>108</a>
174
+ <a name='L109'></a><a href='#L109'>109</a>
175
+ <a name='L110'></a><a href='#L110'>110</a>
176
+ <a name='L111'></a><a href='#L111'>111</a>
177
+ <a name='L112'></a><a href='#L112'>112</a>
178
+ <a name='L113'></a><a href='#L113'>113</a>
179
+ <a name='L114'></a><a href='#L114'>114</a>
180
+ <a name='L115'></a><a href='#L115'>115</a>
181
+ <a name='L116'></a><a href='#L116'>116</a>
182
+ <a name='L117'></a><a href='#L117'>117</a>
183
+ <a name='L118'></a><a href='#L118'>118</a>
184
+ <a name='L119'></a><a href='#L119'>119</a>
185
+ <a name='L120'></a><a href='#L120'>120</a>
186
+ <a name='L121'></a><a href='#L121'>121</a>
187
+ <a name='L122'></a><a href='#L122'>122</a>
188
+ <a name='L123'></a><a href='#L123'>123</a>
189
+ <a name='L124'></a><a href='#L124'>124</a>
190
+ <a name='L125'></a><a href='#L125'>125</a>
191
+ <a name='L126'></a><a href='#L126'>126</a>
192
+ <a name='L127'></a><a href='#L127'>127</a>
193
+ <a name='L128'></a><a href='#L128'>128</a>
194
+ <a name='L129'></a><a href='#L129'>129</a>
195
+ <a name='L130'></a><a href='#L130'>130</a>
196
+ <a name='L131'></a><a href='#L131'>131</a>
197
+ <a name='L132'></a><a href='#L132'>132</a>
198
+ <a name='L133'></a><a href='#L133'>133</a>
199
+ <a name='L134'></a><a href='#L134'>134</a>
200
+ <a name='L135'></a><a href='#L135'>135</a>
201
+ <a name='L136'></a><a href='#L136'>136</a>
202
+ <a name='L137'></a><a href='#L137'>137</a>
203
+ <a name='L138'></a><a href='#L138'>138</a>
204
+ <a name='L139'></a><a href='#L139'>139</a>
205
+ <a name='L140'></a><a href='#L140'>140</a>
206
+ <a name='L141'></a><a href='#L141'>141</a>
207
+ <a name='L142'></a><a href='#L142'>142</a>
208
+ <a name='L143'></a><a href='#L143'>143</a>
209
+ <a name='L144'></a><a href='#L144'>144</a>
210
+ <a name='L145'></a><a href='#L145'>145</a>
211
+ <a name='L146'></a><a href='#L146'>146</a>
212
+ <a name='L147'></a><a href='#L147'>147</a>
213
+ <a name='L148'></a><a href='#L148'>148</a>
214
+ <a name='L149'></a><a href='#L149'>149</a>
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>
224
+ <a name='L159'></a><a href='#L159'>159</a>
225
+ <a name='L160'></a><a href='#L160'>160</a>
226
+ <a name='L161'></a><a href='#L161'>161</a>
227
+ <a name='L162'></a><a href='#L162'>162</a>
228
+ <a name='L163'></a><a href='#L163'>163</a>
229
+ <a name='L164'></a><a href='#L164'>164</a>
230
+ <a name='L165'></a><a href='#L165'>165</a>
231
+ <a name='L166'></a><a href='#L166'>166</a>
232
+ <a name='L167'></a><a href='#L167'>167</a>
233
+ <a name='L168'></a><a href='#L168'>168</a>
234
+ <a name='L169'></a><a href='#L169'>169</a>
235
+ <a name='L170'></a><a href='#L170'>170</a>
236
+ <a name='L171'></a><a href='#L171'>171</a>
237
+ <a name='L172'></a><a href='#L172'>172</a>
238
+ <a name='L173'></a><a href='#L173'>173</a>
239
+ <a name='L174'></a><a href='#L174'>174</a>
240
+ <a name='L175'></a><a href='#L175'>175</a>
241
+ <a name='L176'></a><a href='#L176'>176</a>
242
+ <a name='L177'></a><a href='#L177'>177</a>
243
+ <a name='L178'></a><a href='#L178'>178</a>
244
+ <a name='L179'></a><a href='#L179'>179</a>
245
+ <a name='L180'></a><a href='#L180'>180</a>
246
+ <a name='L181'></a><a href='#L181'>181</a>
247
+ <a name='L182'></a><a href='#L182'>182</a>
248
+ <a name='L183'></a><a href='#L183'>183</a>
249
+ <a name='L184'></a><a href='#L184'>184</a>
250
+ <a name='L185'></a><a href='#L185'>185</a>
251
+ <a name='L186'></a><a href='#L186'>186</a>
252
+ <a name='L187'></a><a href='#L187'>187</a>
253
+ <a name='L188'></a><a href='#L188'>188</a>
254
+ <a name='L189'></a><a href='#L189'>189</a>
255
+ <a name='L190'></a><a href='#L190'>190</a>
256
+ <a name='L191'></a><a href='#L191'>191</a>
257
+ <a name='L192'></a><a href='#L192'>192</a>
258
+ <a name='L193'></a><a href='#L193'>193</a>
259
+ <a name='L194'></a><a href='#L194'>194</a>
260
+ <a name='L195'></a><a href='#L195'>195</a>
261
+ <a name='L196'></a><a href='#L196'>196</a>
262
+ <a name='L197'></a><a href='#L197'>197</a>
263
+ <a name='L198'></a><a href='#L198'>198</a>
264
+ <a name='L199'></a><a href='#L199'>199</a>
265
+ <a name='L200'></a><a href='#L200'>200</a>
266
+ <a name='L201'></a><a href='#L201'>201</a>
267
+ <a name='L202'></a><a href='#L202'>202</a>
268
+ <a name='L203'></a><a href='#L203'>203</a>
269
+ <a name='L204'></a><a href='#L204'>204</a>
270
+ <a name='L205'></a><a href='#L205'>205</a>
271
+ <a name='L206'></a><a href='#L206'>206</a>
272
+ <a name='L207'></a><a href='#L207'>207</a>
273
+ <a name='L208'></a><a href='#L208'>208</a>
274
+ <a name='L209'></a><a href='#L209'>209</a>
275
+ <a name='L210'></a><a href='#L210'>210</a>
276
+ <a name='L211'></a><a href='#L211'>211</a>
277
+ <a name='L212'></a><a href='#L212'>212</a>
278
+ <a name='L213'></a><a href='#L213'>213</a>
279
+ <a name='L214'></a><a href='#L214'>214</a>
280
+ <a name='L215'></a><a href='#L215'>215</a>
281
+ <a name='L216'></a><a href='#L216'>216</a>
282
+ <a name='L217'></a><a href='#L217'>217</a>
283
+ <a name='L218'></a><a href='#L218'>218</a>
284
+ <a name='L219'></a><a href='#L219'>219</a>
285
+ <a name='L220'></a><a href='#L220'>220</a>
286
+ <a name='L221'></a><a href='#L221'>221</a>
287
+ <a name='L222'></a><a href='#L222'>222</a>
288
+ <a name='L223'></a><a href='#L223'>223</a>
289
+ <a name='L224'></a><a href='#L224'>224</a>
290
+ <a name='L225'></a><a href='#L225'>225</a>
291
+ <a name='L226'></a><a href='#L226'>226</a>
292
+ <a name='L227'></a><a href='#L227'>227</a>
293
+ <a name='L228'></a><a href='#L228'>228</a>
294
+ <a name='L229'></a><a href='#L229'>229</a>
295
+ <a name='L230'></a><a href='#L230'>230</a>
296
+ <a name='L231'></a><a href='#L231'>231</a>
297
+ <a name='L232'></a><a href='#L232'>232</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
298
+ <span class="cline-any cline-yes">1x</span>
299
+ <span class="cline-any cline-yes">1x</span>
300
+ <span class="cline-any cline-yes">1x</span>
301
+ <span class="cline-any cline-yes">1x</span>
302
+ <span class="cline-any cline-yes">1x</span>
303
+ <span class="cline-any cline-yes">1x</span>
304
+ <span class="cline-any cline-yes">1x</span>
305
+ <span class="cline-any cline-yes">1x</span>
306
+ <span class="cline-any cline-yes">1x</span>
307
+ <span class="cline-any cline-yes">1x</span>
308
+ <span class="cline-any cline-no">&nbsp;</span>
309
+ <span class="cline-any cline-no">&nbsp;</span>
310
+ <span class="cline-any cline-yes">1x</span>
311
+ <span class="cline-any cline-yes">1x</span>
312
+ <span class="cline-any cline-yes">5x</span>
313
+ <span class="cline-any cline-yes">5x</span>
314
+ <span class="cline-any cline-yes">1x</span>
315
+ <span class="cline-any cline-yes">1x</span>
316
+ <span class="cline-any cline-yes">16x</span>
317
+ <span class="cline-any cline-yes">16x</span>
318
+ <span class="cline-any cline-yes">16x</span>
319
+ <span class="cline-any cline-yes">16x</span>
320
+ <span class="cline-any cline-yes">16x</span>
321
+ <span class="cline-any cline-yes">16x</span>
322
+ <span class="cline-any cline-yes">1x</span>
323
+ <span class="cline-any cline-yes">1x</span>
324
+ <span class="cline-any cline-yes">5x</span>
325
+ <span class="cline-any cline-yes">5x</span>
326
+ <span class="cline-any cline-yes">5x</span>
327
+ <span class="cline-any cline-yes">5x</span>
328
+ <span class="cline-any cline-yes">5x</span>
329
+ <span class="cline-any cline-yes">5x</span>
330
+ <span class="cline-any cline-yes">1x</span>
331
+ <span class="cline-any cline-yes">1x</span>
332
+ <span class="cline-any cline-yes">1x</span>
333
+ <span class="cline-any cline-yes">1x</span>
334
+ <span class="cline-any cline-yes">1x</span>
335
+ <span class="cline-any cline-yes">486x</span>
336
+ <span class="cline-any cline-yes">486x</span>
337
+ <span class="cline-any cline-yes">172x</span>
338
+ <span class="cline-any cline-yes">262x</span>
339
+ <span class="cline-any cline-yes">262x</span>
340
+ <span class="cline-any cline-yes">262x</span>
341
+ <span class="cline-any cline-yes">38x</span>
342
+ <span class="cline-any cline-yes">2x</span>
343
+ <span class="cline-any cline-yes">2x</span>
344
+ <span class="cline-any cline-yes">2x</span>
345
+ <span class="cline-any cline-yes">2x</span>
346
+ <span class="cline-any cline-yes">2x</span>
347
+ <span class="cline-any cline-yes">38x</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-yes">36x</span>
351
+ <span class="cline-any cline-yes">262x</span>
352
+ <span class="cline-any cline-yes">1x</span>
353
+ <span class="cline-any cline-yes">1x</span>
354
+ <span class="cline-any cline-yes">1x</span>
355
+ <span class="cline-any cline-yes">1x</span>
356
+ <span class="cline-any cline-yes">224x</span>
357
+ <span class="cline-any cline-yes">12x</span>
358
+ <span class="cline-any cline-yes">223x</span>
359
+ <span class="cline-any cline-yes">211x</span>
360
+ <span class="cline-any cline-yes">22x</span>
361
+ <span class="cline-any cline-yes">211x</span>
362
+ <span class="cline-any cline-yes">172x</span>
363
+ <span class="cline-any cline-yes">172x</span>
364
+ <span class="cline-any cline-yes">486x</span>
365
+ <span class="cline-any cline-yes">486x</span>
366
+ <span class="cline-any cline-yes">1x</span>
367
+ <span class="cline-any cline-yes">1x</span>
368
+ <span class="cline-any cline-yes">1x</span>
369
+ <span class="cline-any cline-yes">2x</span>
370
+ <span class="cline-any cline-yes">2x</span>
371
+ <span class="cline-any cline-yes">2x</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-yes">2x</span>
375
+ <span class="cline-any cline-yes">2x</span>
376
+ <span class="cline-any cline-yes">2x</span>
377
+ <span class="cline-any cline-yes">2x</span>
378
+ <span class="cline-any cline-yes">2x</span>
379
+ <span class="cline-any cline-yes">2x</span>
380
+ <span class="cline-any cline-yes">1x</span>
381
+ <span class="cline-any cline-yes">1x</span>
382
+ <span class="cline-any cline-yes">1x</span>
383
+ <span class="cline-any cline-yes">9x</span>
384
+ <span class="cline-any cline-yes">9x</span>
385
+ <span class="cline-any cline-yes">9x</span>
386
+ <span class="cline-any cline-yes">9x</span>
387
+ <span class="cline-any cline-no">&nbsp;</span>
388
+ <span class="cline-any cline-no">&nbsp;</span>
389
+ <span class="cline-any cline-yes">9x</span>
390
+ <span class="cline-any cline-yes">9x</span>
391
+ <span class="cline-any cline-yes">1x</span>
392
+ <span class="cline-any cline-yes">1x</span>
393
+ <span class="cline-any cline-yes">114x</span>
394
+ <span class="cline-any cline-yes">114x</span>
395
+ <span class="cline-any cline-yes">1x</span>
396
+ <span class="cline-any cline-yes">1x</span>
397
+ <span class="cline-any cline-no">&nbsp;</span>
398
+ <span class="cline-any cline-no">&nbsp;</span>
399
+ <span class="cline-any cline-no">&nbsp;</span>
400
+ <span class="cline-any cline-yes">1x</span>
401
+ <span class="cline-any cline-yes">1x</span>
402
+ <span class="cline-any cline-no">&nbsp;</span>
403
+ <span class="cline-any cline-no">&nbsp;</span>
404
+ <span class="cline-any cline-yes">1x</span>
405
+ <span class="cline-any cline-yes">1x</span>
406
+ <span class="cline-any cline-no">&nbsp;</span>
407
+ <span class="cline-any cline-no">&nbsp;</span>
408
+ <span class="cline-any cline-no">&nbsp;</span>
409
+ <span class="cline-any cline-yes">1x</span>
410
+ <span class="cline-any cline-yes">1x</span>
411
+ <span class="cline-any cline-yes">9x</span>
412
+ <span class="cline-any cline-yes">9x</span>
413
+ <span class="cline-any cline-yes">9x</span>
414
+ <span class="cline-any cline-yes">9x</span>
415
+ <span class="cline-any cline-yes">9x</span>
416
+ <span class="cline-any cline-yes">9x</span>
417
+ <span class="cline-any cline-yes">1x</span>
418
+ <span class="cline-any cline-yes">1x</span>
419
+ <span class="cline-any cline-yes">1x</span>
420
+ <span class="cline-any cline-yes">1x</span>
421
+ <span class="cline-any cline-yes">9x</span>
422
+ <span class="cline-any cline-yes">9x</span>
423
+ <span class="cline-any cline-yes">9x</span>
424
+ <span class="cline-any cline-yes">9x</span>
425
+ <span class="cline-any cline-yes">9x</span>
426
+ <span class="cline-any cline-yes">9x</span>
427
+ <span class="cline-any cline-yes">9x</span>
428
+ <span class="cline-any cline-no">&nbsp;</span>
429
+ <span class="cline-any cline-no">&nbsp;</span>
430
+ <span class="cline-any cline-yes">9x</span>
431
+ <span class="cline-any cline-yes">1x</span>
432
+ <span class="cline-any cline-yes">1x</span>
433
+ <span class="cline-any cline-yes">7x</span>
434
+ <span class="cline-any cline-yes">7x</span>
435
+ <span class="cline-any cline-yes">7x</span>
436
+ <span class="cline-any cline-yes">7x</span>
437
+ <span class="cline-any cline-yes">7x</span>
438
+ <span class="cline-any cline-no">&nbsp;</span>
439
+ <span class="cline-any cline-yes">7x</span>
440
+ <span class="cline-any cline-yes">7x</span>
441
+ <span class="cline-any cline-yes">7x</span>
442
+ <span class="cline-any cline-yes">1x</span>
443
+ <span class="cline-any cline-yes">1x</span>
444
+ <span class="cline-any cline-yes">7x</span>
445
+ <span class="cline-any cline-yes">7x</span>
446
+ <span class="cline-any cline-yes">7x</span>
447
+ <span class="cline-any cline-yes">7x</span>
448
+ <span class="cline-any cline-yes">7x</span>
449
+ <span class="cline-any cline-yes">7x</span>
450
+ <span class="cline-any cline-yes">7x</span>
451
+ <span class="cline-any cline-yes">7x</span>
452
+ <span class="cline-any cline-yes">7x</span>
453
+ <span class="cline-any cline-yes">7x</span>
454
+ <span class="cline-any cline-yes">7x</span>
455
+ <span class="cline-any cline-no">&nbsp;</span>
456
+ <span class="cline-any cline-no">&nbsp;</span>
457
+ <span class="cline-any cline-no">&nbsp;</span>
458
+ <span class="cline-any cline-no">&nbsp;</span>
459
+ <span class="cline-any cline-no">&nbsp;</span>
460
+ <span class="cline-any cline-yes">7x</span>
461
+ <span class="cline-any cline-yes">7x</span>
462
+ <span class="cline-any cline-yes">7x</span>
463
+ <span class="cline-any cline-yes">7x</span>
464
+ <span class="cline-any cline-no">&nbsp;</span>
465
+ <span class="cline-any cline-no">&nbsp;</span>
466
+ <span class="cline-any cline-no">&nbsp;</span>
467
+ <span class="cline-any cline-yes">7x</span>
468
+ <span class="cline-any cline-yes">1x</span>
469
+ <span class="cline-any cline-yes">1x</span>
470
+ <span class="cline-any cline-yes">7x</span>
471
+ <span class="cline-any cline-yes">7x</span>
472
+ <span class="cline-any cline-yes">7x</span>
473
+ <span class="cline-any cline-yes">7x</span>
474
+ <span class="cline-any cline-yes">7x</span>
475
+ <span class="cline-any cline-yes">7x</span>
476
+ <span class="cline-any cline-yes">7x</span>
477
+ <span class="cline-any cline-yes">7x</span>
478
+ <span class="cline-any cline-yes">7x</span>
479
+ <span class="cline-any cline-no">&nbsp;</span>
480
+ <span class="cline-any cline-no">&nbsp;</span>
481
+ <span class="cline-any cline-yes">7x</span>
482
+ <span class="cline-any cline-yes">7x</span>
483
+ <span class="cline-any cline-yes">7x</span>
484
+ <span class="cline-any cline-yes">7x</span>
485
+ <span class="cline-any cline-yes">7x</span>
486
+ <span class="cline-any cline-no">&nbsp;</span>
487
+ <span class="cline-any cline-no">&nbsp;</span>
488
+ <span class="cline-any cline-no">&nbsp;</span>
489
+ <span class="cline-any cline-yes">7x</span>
490
+ <span class="cline-any cline-yes">1x</span>
491
+ <span class="cline-any cline-yes">1x</span>
492
+ <span class="cline-any cline-yes">1x</span>
493
+ <span class="cline-any cline-yes">1x</span>
494
+ <span class="cline-any cline-yes">1x</span>
495
+ <span class="cline-any cline-yes">1x</span>
496
+ <span class="cline-any cline-yes">1x</span>
497
+ <span class="cline-any cline-no">&nbsp;</span>
498
+ <span class="cline-any cline-no">&nbsp;</span>
499
+ <span class="cline-any cline-no">&nbsp;</span>
500
+ <span class="cline-any cline-yes">1x</span>
501
+ <span class="cline-any cline-yes">1x</span>
502
+ <span class="cline-any cline-yes">1x</span>
503
+ <span class="cline-any cline-no">&nbsp;</span>
504
+ <span class="cline-any cline-no">&nbsp;</span>
505
+ <span class="cline-any cline-no">&nbsp;</span>
506
+ <span class="cline-any cline-yes">1x</span>
507
+ <span class="cline-any cline-yes">1x</span>
508
+ <span class="cline-any cline-yes">1x</span>
509
+ <span class="cline-any cline-yes">9x</span>
510
+ <span class="cline-any cline-yes">9x</span>
511
+ <span class="cline-any cline-yes">1x</span>
512
+ <span class="cline-any cline-yes">1x</span>
513
+ <span class="cline-any cline-yes">22x</span>
514
+ <span class="cline-any cline-yes">22x</span>
515
+ <span class="cline-any cline-yes">1x</span>
516
+ <span class="cline-any cline-yes">1x</span>
517
+ <span class="cline-any cline-yes">15x</span>
518
+ <span class="cline-any cline-yes">15x</span>
519
+ <span class="cline-any cline-yes">1x</span>
520
+ <span class="cline-any cline-yes">1x</span>
521
+ <span class="cline-any cline-yes">15x</span>
522
+ <span class="cline-any cline-yes">15x</span>
523
+ <span class="cline-any cline-yes">15x</span>
524
+ <span class="cline-any cline-yes">15x</span>
525
+ <span class="cline-any cline-yes">15x</span>
526
+ <span class="cline-any cline-yes">15x</span>
527
+ <span class="cline-any cline-yes">1x</span>
528
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import _ from 'lodash'
529
+ import moment from 'moment'
530
+ import makeDebug from 'debug'
531
+ import mongodb from 'mongodb'
532
+ import errors from '@feathersjs/errors'
533
+ &nbsp;
534
+ const { MongoClient, ObjectID } = mongodb
535
+ const debug = makeDebug('kdk:core:db')
536
+ &nbsp;
537
+ // This ensure moment objects are correctly serialized in MongoDB
538
+ Object.getPrototypeOf(moment()).toBSON = <span class="fstat-no" title="function not covered" >function () {</span>
539
+ <span class="cstat-no" title="statement not covered" > return this.toDate()</span>
540
+ <span class="cstat-no" title="statement not covered" >}</span>
541
+ &nbsp;
542
+ export function isObjectID (id) {
543
+ return id &amp;&amp; (typeof id.toHexString === 'function') <span class="branch-0 cbranch-no" title="branch not covered" >&amp;&amp; (typeof id.getTimestamp === 'function')</span>
544
+ }
545
+ &nbsp;
546
+ export function idToString (id) {
547
+ return (typeof id === 'object'
548
+ ? (ObjectID.isValid(id)
549
+ ? id.toString()
550
+ : idToString(id._id))
551
+ <span class="branch-0 cbranch-no" title="branch not covered" > : id)</span>
552
+ }
553
+ &nbsp;
554
+ export function createObjectID (id) {
555
+ // This ensure it works even if id is already an ObjectID
556
+ if (isObjectID(id)) <span class="branch-0 cbranch-no" title="branch not covered" >return id</span>
557
+ // Take care that numbers could be a valid object ID
558
+ else if ((typeof id === 'number') || !ObjectID.isValid(id)) <span class="branch-0 cbranch-no" title="branch not covered" >return null</span>
559
+ else return new ObjectID(id)
560
+ }
561
+ &nbsp;
562
+ // Utility function used to convert from string to MongoDB IDs as required eg by queries
563
+ // It only processes _id properties or operators (eg $ne, $in) to be converted
564
+ // If you have others properties to be converted use toObjectIDs
565
+ export function objectifyIDs (object) {
566
+ // Avoid destructuring already transformed Date, ObjectID or arrays
567
+ if (_.isPlainObject(object)) {
568
+ _.forOwn(object, (value, key) =&gt; {
569
+ // Process current attributes or recurse
570
+ // Take care to nested fields like 'field._id'
571
+ if (key === '_id' || key.endsWith('._id') || key === '$ne') {
572
+ if (typeof value === 'string') {
573
+ const id = createObjectID(value)
574
+ if (id) {
575
+ object[key] = id
576
+ }
577
+ debug('Objectify ID ' + key, id)
578
+ } else if (Array.isArray(value)) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
579
+ <span class="cstat-no" title="statement not covered" > debug('Objectify ID array ' + key)</span>
580
+ <span class="cstat-no" title="statement not covered" > object[key] = value.map(id =&gt; createObjectID(id)).filter(id =&gt; id)</span>
581
+ } else objectifyIDs(value)
582
+ } else if (['$in', '$nin'].includes(key)) {
583
+ debug('Objectify ID array ' + key)
584
+ const ids = value.map(id =&gt; createObjectID(id)).filter(id =&gt; id)
585
+ // Take care that $in/$nin can be used for others types than Object IDs so conversion might fail
586
+ if (ids.length &gt; 0) object[key] = ids
587
+ } else if ((key === '$or') || (key === '$and')) {
588
+ value.forEach(entry =&gt; objectifyIDs(entry))
589
+ } else {
590
+ if (!Array.isArray(value)) objectifyIDs(value)
591
+ else value.forEach(entry =&gt; objectifyIDs(entry))
592
+ }
593
+ })
594
+ }
595
+ return object
596
+ }
597
+ &nbsp;
598
+ // Utility function used to convert a fixed set of properties on a given object from string to MongoDB IDs
599
+ export function toObjectIDs (object, properties) {
600
+ properties.forEach(property =&gt; {
601
+ const value = _.get(object, property)
602
+ if (Array.isArray(value)) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
603
+ <span class="cstat-no" title="statement not covered" > const ids = value.map(id =&gt; createObjectID(id)).filter(id =&gt; id)</span>
604
+ <span class="cstat-no" title="statement not covered" > if (ids.length &gt; 0) _.set(object, property, ids)</span>
605
+ } else {
606
+ const id = createObjectID(value)
607
+ if (id) _.set(object, property, id)
608
+ }
609
+ })
610
+ }
611
+ &nbsp;
612
+ export class Database {
613
+ constructor (app) {
614
+ try {
615
+ this.app = app
616
+ this._adapter = app.get('db').adapter
617
+ } <span class="branch-0 cbranch-no" title="branch not covered" >catch (error) {</span>
618
+ <span class="cstat-no" title="statement not covered" > throw new errors.GeneralError('Cannot find database adapter configuration in application')</span>
619
+ <span class="cstat-no" title="statement not covered" > }</span>
620
+ this._collections = new Map()
621
+ }
622
+ &nbsp;
623
+ get adapter () {
624
+ return this._adapter
625
+ }
626
+ &nbsp;
627
+ <span class="fstat-no" title="function not covered" > async connect () {</span>
628
+ <span class="cstat-no" title="statement not covered" > // Default implementation</span>
629
+ <span class="cstat-no" title="statement not covered" > return null</span>
630
+ <span class="cstat-no" title="statement not covered" > }</span>
631
+ &nbsp;
632
+ <span class="fstat-no" title="function not covered" > async disconnect () {</span>
633
+ <span class="cstat-no" title="statement not covered" > // Default implementation</span>
634
+ <span class="cstat-no" title="statement not covered" > }</span>
635
+ &nbsp;
636
+ <span class="fstat-no" title="function not covered" > async healthcheck () {</span>
637
+ <span class="cstat-no" title="statement not covered" > // Default implementation</span>
638
+ <span class="cstat-no" title="statement not covered" > return false</span>
639
+ <span class="cstat-no" title="statement not covered" > }</span>
640
+ &nbsp;
641
+ static create (app) {
642
+ switch (this.adapter) {
643
+ <span class="branch-0 cbranch-no" title="branch not covered" > case 'mongodb':</span>
644
+ default:
645
+ return new MongoDatabase(app)
646
+ }
647
+ }
648
+ }
649
+ &nbsp;
650
+ export class MongoDatabase extends Database {
651
+ constructor (app) {
652
+ super(app)
653
+ try {
654
+ // Primary DB
655
+ this._dbUrl = app.get('db').url
656
+ // Secondaries if any
657
+ this._secondaries = app.get('db').secondaries || {}
658
+ } <span class="branch-0 cbranch-no" title="branch not covered" >catch (error) {</span>
659
+ <span class="cstat-no" title="statement not covered" > throw new errors.GeneralError('Cannot find database connection settings in application')</span>
660
+ <span class="cstat-no" title="statement not covered" > }</span>
661
+ }
662
+ &nbsp;
663
+ connectionDb (url) {
664
+ // Extract database name from url. Need to remove the connections options if any
665
+ let dbName
666
+ const indexOfDBName = url.lastIndexOf('/') + 1
667
+ const indexOfOptions = url.indexOf('?')
668
+ if (indexOfOptions === -1) dbName = url.substring(indexOfDBName)
669
+ <span class="cstat-no" title="statement not covered" ><span class="branch-0 cbranch-no" title="branch not covered" > else dbName = url.substring(indexOfDBName, indexOfOptions)</span></span>
670
+ &nbsp;
671
+ return dbName
672
+ }
673
+ &nbsp;
674
+ async connect () {
675
+ try {
676
+ // Connect to primary
677
+ this._client = await MongoClient.connect(this._dbUrl)
678
+ this._db = await this._client.db(this.connectionDb(this._dbUrl))
679
+ debug('Connected to primary DB ' + this.adapter)
680
+ // Then secondaries if any
681
+ this._clients = {}
682
+ this._dbs = {}
683
+ if (this._secondaries) {
684
+ const dbNames = _.keys(this._secondaries)
685
+ for (let i = 0; i &lt; dbNames.length; i++) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
686
+ <span class="cstat-no" title="statement not covered" > const dbName = dbNames[i]</span>
687
+ <span class="cstat-no" title="statement not covered" > const dbUrl = this._secondaries[dbName]</span>
688
+ <span class="cstat-no" title="statement not covered" > this._clients[dbName] = await MongoClient.connect(dbUrl)</span>
689
+ <span class="cstat-no" title="statement not covered" > this._dbs[dbName] = await this._clients[dbName].db(this.connectionDb(dbUrl))</span>
690
+ <span class="cstat-no" title="statement not covered" > }</span>
691
+ if (dbNames.length &gt; 0) <span class="branch-0 cbranch-no" title="branch not covered" >debug('Connected to secondaries DB ' + this.adapter)</span>
692
+ }
693
+ return this._db
694
+ } <span class="branch-0 cbranch-no" title="branch not covered" >catch (error) {</span>
695
+ <span class="cstat-no" title="statement not covered" > this.app.logger.error('Could not connect to ' + this.adapter + ' database(s), please check your configuration', error)</span>
696
+ <span class="cstat-no" title="statement not covered" > throw error</span>
697
+ <span class="cstat-no" title="statement not covered" > }</span>
698
+ }
699
+ &nbsp;
700
+ async disconnect () {
701
+ try {
702
+ await this._client.close()
703
+ debug('Disconnected from primary DB ' + this.adapter)
704
+ this._client = null
705
+ this._db = null
706
+ if (this._secondaries) {
707
+ const dbNames = _.keys(this._secondaries)
708
+ const clients = _.values(this._clients)
709
+ for (let i = 0; i &lt; clients.length; i++) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
710
+ <span class="cstat-no" title="statement not covered" > await clients[i].close()</span>
711
+ <span class="cstat-no" title="statement not covered" > }</span>
712
+ this._clients = {}
713
+ this._dbs = {}
714
+ if (dbNames.length &gt; 0) <span class="branch-0 cbranch-no" title="branch not covered" >debug('Disconnected from secondaries DB ' + this.adapter)</span>
715
+ }
716
+ } <span class="branch-0 cbranch-no" title="branch not covered" >catch (error) {</span>
717
+ <span class="cstat-no" title="statement not covered" > this.app.logger.error('Could not disconnect from ' + this.adapter + ' database(s)', error)</span>
718
+ <span class="cstat-no" title="statement not covered" > throw error</span>
719
+ <span class="cstat-no" title="statement not covered" > }</span>
720
+ }
721
+ &nbsp;
722
+ async healthcheck () {
723
+ try {
724
+ await this.instance.admin().ping()
725
+ if (this._secondaries) {
726
+ const dbNames = _.keys(this._secondaries)
727
+ for (let i = 0; i &lt; dbNames.length; i++) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
728
+ <span class="cstat-no" title="statement not covered" > const dbName = dbNames[i]</span>
729
+ <span class="cstat-no" title="statement not covered" > await this._dbs[dbName].admin().ping()</span>
730
+ <span class="cstat-no" title="statement not covered" > }</span>
731
+ }
732
+ return true
733
+ } <span class="branch-0 cbranch-no" title="branch not covered" >catch (error) {</span>
734
+ <span class="cstat-no" title="statement not covered" > this.app.logger.error('Healthcheck from ' + this.adapter + ' database(s) failed', error)</span>
735
+ <span class="cstat-no" title="statement not covered" > return false</span>
736
+ <span class="cstat-no" title="statement not covered" > }</span>
737
+ }
738
+ &nbsp;
739
+ get client () {
740
+ return this._client
741
+ }
742
+ &nbsp;
743
+ get instance () {
744
+ return this._db
745
+ }
746
+ &nbsp;
747
+ db (dbName) {
748
+ return (dbName <span class="branch-0 cbranch-no" title="branch not covered" >? this._dbs[dbName] </span>: this._db)
749
+ }
750
+ &nbsp;
751
+ collection (name, dbName) {
752
+ if (!this._collections.has(name)) {
753
+ // Get collection from secondary or primary DB
754
+ this._collections.set(name, this.db(dbName).collection(name))
755
+ }
756
+ return this._collections.get(name)
757
+ }
758
+ }
759
+ &nbsp;</pre></td></tr></table></pre>
760
+
761
+ <div class='push'></div><!-- for sticky footer -->
762
+ </div><!-- /wrapper -->
763
+ <div class='footer quiet pad2 space-top1 center small'>
764
+ Code coverage generated by
765
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
766
+ at 2024-06-26T10:45:51.176Z
767
+ </div>
768
+ <script src="../../prettify.js"></script>
769
+ <script>
770
+ window.onload = function () {
771
+ prettyPrint();
772
+ };
773
+ </script>
774
+ <script src="../../sorter.js"></script>
775
+ <script src="../../block-navigation.js"></script>
776
+ </body>
777
+ </html>
778
+