@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,151 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ set -x
4
+
5
+ THIS_FILE=$(readlink -f "${BASH_SOURCE[0]}")
6
+ THIS_DIR=$(dirname "$THIS_FILE")
7
+ ROOT_DIR=$(dirname "$THIS_DIR")
8
+
9
+ . "$ROOT_DIR/kash.sh"
10
+
11
+ ### Github Actions
12
+
13
+ init_github() {
14
+ install_reqs yq age sops nvm node16 node18 node20 cc_test_reporter
15
+
16
+ # mongo is not available for alpine hosts
17
+ if [ "$OS_ID" != "alpine" ]; then
18
+ install_reqs mongo4 mongo5 mongo6 mongo7
19
+ fi
20
+
21
+ install_reqs kubectl helm helmfile k9s
22
+ }
23
+
24
+ ## Requirements helpers
25
+
26
+ ensure_yq
27
+ ensure_age
28
+ ensure_sops
29
+
30
+ # These can't fail since we ensured bins were installed
31
+ command -v yq
32
+ command -v age
33
+ command -v sops
34
+
35
+ if [ "$CI" = true ]; then
36
+ begin_group "Init $CI_ID"
37
+
38
+ # Make sure installing stuff doesnt mess with cwd
39
+ CURRENT_DIR=$(pwd)
40
+ init_"${CI_ID}"
41
+ [ "$CURRENT_DIR" != "$(pwd)" ] && exit 1
42
+
43
+ end_group "Init $CI_ID"
44
+ fi
45
+
46
+ ## Utils
47
+
48
+ mkdir -p "$TMP_DIR/utils"
49
+ cd "$TMP_DIR/utils"
50
+ curl -OLsS "https://raw.githubusercontent.com/kalisio/krawler/master/package.json"
51
+ [ "$(get_json_value "$TMP_DIR/utils/package.json" 'name')" != "@kalisio/krawler" ] && exit 1
52
+ cd ~-
53
+
54
+ ## Git helpers
55
+
56
+ case "$CI_ID" in
57
+ github)
58
+ [ "$(get_git_branch "$ROOT_DIR" )" != "$GITHUB_REF_NAME" ] && exit 1
59
+ ;;
60
+ gitlab)
61
+ [ "$(get_git_branch "$ROOT_DIR" )" != "$CI_COMMIT_REF_NAME" ] && exit 1
62
+ ;;
63
+ *)
64
+ ;;
65
+ esac
66
+
67
+ echo "Committer is $(get_git_commit_author_name "$ROOT_DIR") <$(get_git_commit_author_email "$ROOT_DIR")>"
68
+ echo "Commit message is $(get_git_commit_message "$ROOT_DIR")"
69
+
70
+ git_shallow_clone https://github.com/kalisio/feathers-s3.git "$TMP_DIR/feathers-s3.master"
71
+ git_shallow_clone https://github.com/kalisio/feathers-s3.git "$TMP_DIR/feathers-s3.v1.3.0" v1.3.0
72
+
73
+ [ "$(get_git_branch "$TMP_DIR/feathers-s3.master" )" != "master" ] && exit 1
74
+ [ "$(get_git_branch "$TMP_DIR/feathers-s3.v1.3.0" )" != "" ] && exit 1
75
+
76
+ [ "$(get_git_tag "$TMP_DIR/feathers-s3.master" )" != "" ] && exit 1
77
+ [ "$(get_git_tag "$TMP_DIR/feathers-s3.v1.3.0" )" != "v1.3.0" ] && exit 1
78
+
79
+ [ "$(get_git_commit_sha "$TMP_DIR/feathers-s3.v1.3.0" )" != "e28f53c386a2f74de7bdee7231b97e7150177cc7" ] && exit 1
80
+
81
+ git_shallow_clone https://github.com/kalisio/kApp.git "$TMP_DIR/kApp.master"
82
+ git_shallow_clone https://github.com/kalisio/kApp.git "$TMP_DIR/kApp.v1.3" test-v1.3
83
+ git_shallow_clone https://github.com/kalisio/kApp.git "$TMP_DIR/kApp.v1.3.0" prod-v1.3.0
84
+
85
+ [ "$(get_git_branch "$TMP_DIR/kApp.master" )" != "master" ] && exit 1
86
+ [ "$(get_git_branch "$TMP_DIR/kApp.v1.3" )" != "test-v1.3" ] && exit 1
87
+
88
+ [ "$(get_git_tag "$TMP_DIR/kApp.master" )" != "" ] && exit 1
89
+ [ "$(get_git_tag "$TMP_DIR/kApp.v1.3" )" != "" ] && exit 1
90
+ [ "$(get_git_tag "$TMP_DIR/kApp.v1.3.0" )" != "prod-v1.3.0" ] && exit 1
91
+
92
+ ## Kalisio helpers
93
+
94
+ # Setup a fake workspace with additional dependencies
95
+ mkdir -p "$TMP_DIR/fake"
96
+ setup_workspace "$TMP_DIR/fake" "https://github.com/kalisio/kApp.git" \
97
+ "https://github.com/kalisio/feathers-s3.git" \
98
+ "https://github.com/kalisio/feathers-import-export.git"
99
+
100
+ # And check everything expected is in there
101
+ [ ! -d "$TMP_DIR/fake/development" ] && exit 1
102
+ [ ! -d "$TMP_DIR/fake/feathers-s3" ] && exit 1
103
+ [ ! -d "$TMP_DIR/fake/feathers-import-export" ] && exit 1
104
+
105
+ [ "$(get_flavor_from_git "$TMP_DIR/kApp.master" )" != "dev" ] && exit 1
106
+ [ "$(get_flavor_from_git "$TMP_DIR/kApp.v1.3" )" != "test" ] && exit 1
107
+ [ "$(get_flavor_from_git "$TMP_DIR/kApp.v1.3.0" )" != "prod" ] && exit 1
108
+
109
+ [ "$(get_git_ref_from_container_tag "1.1.1-test")" != "test-v1.1" ] && exit 1
110
+ [ "$(get_git_ref_from_container_tag "test")" != "test" ] && exit 1
111
+ [ "$(get_git_ref_from_container_tag "1.1.1-prod")" != "prod-v1.1.1" ] && exit 1
112
+ [ "$(get_git_ref_from_container_tag "1.1.1-dev")" != "master" ] && exit 1
113
+ [ "$(get_git_ref_from_container_tag "dev")" != "master" ] && exit 1
114
+
115
+ ## App helpers
116
+
117
+ init_app_infos "$TMP_DIR/kApp.master" "$TMP_DIR/kli"
118
+
119
+ [ "$(get_app_name)" != "kapp" ] && exit 1
120
+ # [ "$(get_app_version)" != "kapp" ] && exit 1
121
+ [ "$(get_app_flavor)" != "dev" ] && exit 1
122
+
123
+ init_app_infos "$TMP_DIR/kApp.v1.3" "$TMP_DIR/kli"
124
+
125
+ [ "$(get_app_name)" != "kapp" ] && exit 1
126
+ [ "$(get_app_version)" != "1.3.0" ] && exit 1
127
+ [ "$(get_app_flavor)" != "test" ] && exit 1
128
+
129
+ init_app_infos "$TMP_DIR/kApp.v1.3.0" "$TMP_DIR/kli"
130
+
131
+ [ "$(get_app_name)" != "kapp" ] && exit 1
132
+ [ "$(get_app_version)" != "1.3.0" ] && exit 1
133
+ [ "$(get_app_flavor)" != "prod" ] && exit 1
134
+
135
+ ## Lib helpers
136
+
137
+ # git clone --depth 1 https://github.com/kalisio/feathers-s3.git "$TMP_DIR/feathers-s3.master"
138
+
139
+ init_lib_infos "$TMP_DIR/feathers-s3.master"
140
+
141
+ [ "$(get_lib_name)" != "@kalisio/feathers-s3" ] && exit 1
142
+
143
+ ## Job helpers
144
+
145
+ git_shallow_clone https://github.com/kalisio/k-icos.git "$TMP_DIR/k-icos.master"
146
+
147
+ init_job_infos "$TMP_DIR/k-icos.master"
148
+
149
+ [ "$(get_job_name)" != "k-icos" ] && exit 1
150
+
151
+ exit 0
@@ -0,0 +1,48 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ # set -x
4
+
5
+ THIS_FILE=$(readlink -f "${BASH_SOURCE[0]}")
6
+ THIS_DIR=$(dirname "$THIS_FILE")
7
+ ROOT_DIR=$(dirname "$THIS_DIR")
8
+ WORKSPACE_DIR="$(dirname "$ROOT_DIR")"
9
+
10
+ . "$THIS_DIR/kash/kash.sh"
11
+
12
+ ## Parse options
13
+ ##
14
+
15
+ NODE_VER=16
16
+ MONGO_VER="4"
17
+ CI_STEP_NAME="Run tests"
18
+ CODE_COVERAGE=false
19
+ while getopts "m:n:cr:" option; do
20
+ case $option in
21
+ m) # defines mongo version
22
+ MONGO_VER=$OPTARG
23
+ ;;
24
+ n) # defines node version
25
+ NODE_VER=$OPTARG
26
+ ;;
27
+ c) # publish code coverage
28
+ CODE_COVERAGE=true
29
+ ;;
30
+ r) # report outcome to slack
31
+ CI_STEP_NAME=$OPTARG
32
+ load_env_files "$WORKSPACE_DIR/development/common/SLACK_WEBHOOK_LIBS.enc.env"
33
+ trap 'slack_ci_report "$ROOT_DIR" "$CI_STEP_NAME" "$?" "$SLACK_WEBHOOK_LIBS"' EXIT
34
+ ;;
35
+ *)
36
+ ;;
37
+ esac
38
+ done
39
+
40
+ ## Init workspace
41
+ ##
42
+
43
+ . "$WORKSPACE_DIR/development/workspaces/libs/libs.sh" kdk
44
+
45
+ ## Run tests
46
+ ##
47
+
48
+ run_lib_tests "$ROOT_DIR" "$CODE_COVERAGE" "$NODE_VER" "$MONGO_VER"
@@ -0,0 +1,42 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ # set -x
4
+
5
+ THIS_FILE=$(readlink -f "${BASH_SOURCE[0]}")
6
+ THIS_DIR=$(dirname "$THIS_FILE")
7
+ ROOT_DIR=$(dirname "$THIS_DIR")
8
+ WORKSPACE_DIR="$(dirname "$ROOT_DIR")"
9
+
10
+ . "$THIS_DIR/kash/kash.sh"
11
+
12
+ ## Parse options
13
+ ##
14
+
15
+ begin_group "Setting up workspace ..."
16
+
17
+ if [ "$CI" != true ]; then
18
+ while getopts "b:t" option; do
19
+ case $option in
20
+ b) # defines branch
21
+ WORKSPACE_BRANCH=$OPTARG;;
22
+ t) # defines tag
23
+ WORKSPACE_TAG=$OPTARG;;
24
+ *)
25
+ ;;
26
+ esac
27
+ done
28
+
29
+ shift $((OPTIND-1))
30
+ WORKSPACE_DIR="$1"
31
+
32
+ # Clone project in the workspace
33
+ git_shallow_clone "$KALISIO_GITHUB_URL/kalisio/kdk.git" "$WORKSPACE_DIR/kdk" "${WORKSPACE_TAG:-${WORKSPACE_BRANCH:-}}"
34
+ fi
35
+
36
+ setup_lib_workspace "$WORKSPACE_DIR" "$KALISIO_GITHUB_URL/kalisio/development.git" \
37
+ "https://github.com/kalisio/feathers-distributed.git" \
38
+ "https://github.com/kalisio/feathers-webpush.git" \
39
+ "https://github.com/kalisio/feathers-s3.git" \
40
+ "https://github.com/kalisio/feathers-import-export.git"
41
+
42
+ end_group "Setting up workspace ..."
@@ -220,6 +220,37 @@ describe('core:hooks', () => {
220
220
  expect(hook.params.collation.locale).to.equal('fr')
221
221
  })
222
222
 
223
+ it('marshalls HTTP queries', () => {
224
+ const now = new Date()
225
+ const datetime = now.toISOString()
226
+ const notADateTime = datetime.replace('T', 'Z')
227
+ const query = {
228
+ booleanTrue: 'true',
229
+ booleanFalse: 'false',
230
+ notABoolean: 'falsy',
231
+ number: '223',
232
+ notANumber: '22E',
233
+ datetime,
234
+ notADateTime
235
+ }
236
+ const hook = {
237
+ type: 'before',
238
+ params: { provider: 'socketio', query }
239
+ }
240
+ // Nothing should happen with websocket provider
241
+ hooks.marshallHttpQuery(hook)
242
+ expect(hook.params.query).to.deep.equal(query)
243
+ hook.params.provider = 'rest'
244
+ hooks.marshallHttpQuery(hook)
245
+ expect(hook.params.query.booleanTrue).to.equal(true)
246
+ expect(hook.params.query.booleanFalse).to.equal(false)
247
+ expect(hook.params.query.notABoolean).to.equal('falsy')
248
+ expect(hook.params.query.number).to.equal(223)
249
+ expect(hook.params.query.notANumber).to.equal('22E')
250
+ expect(hook.params.query.datetime.valueOf()).to.equal(now.valueOf())
251
+ expect(hook.params.query.notADateTime).to.equal(notADateTime)
252
+ })
253
+
223
254
  it('diacristic search', () => {
224
255
  const hook = {
225
256
  type: 'before',
@@ -0,0 +1,7 @@
1
+ {"level":"info","message":"This is a log test"}
2
+ {"level":"error","message":"error: api/tags - Method: create: You are not allowed to access service tags"}
3
+ {"level":"error","message":"error: api/users - Method: create: The provided password does not comply to the password policy"}
4
+ {"level":"error","message":"error: api/users - Method: create: The provided password does not comply to the password policy"}
5
+ {"level":"error","message":"error: api/authorisations - Method: create: You are not allowed to change authorisation on resource"}
6
+ {"level":"error","message":"error: api/authorisations - Method: remove: You are not allowed to change authorisation on subject(s)"}
7
+ {"level":"info","message":"This is a log test"}
@@ -0,0 +1,14 @@
1
+ {"level":"error","message":"error: api/account - Method: create: The provided password does not comply to the password policy"}
2
+ {"level":"error","message":"error: api/account - Method: create: The provided password does not comply to the password policy"}
3
+ {"level":"error","message":"error: api/account - Method: create: The provided password does not comply to the password policy"}
4
+ {"level":"error","message":"error: api/account - Method: create: The provided password does not comply to the password policy"}
5
+ {"level":"error","message":"error: api/account - Method: create: The provided password does not comply to the password policy"}
6
+ {"level":"error","message":"error: api/account - Method: create: The provided password does not comply to the password policy"}
7
+ {"level":"error","message":"error: api/account - Method: create: The provided password does not comply to the password policy"}
8
+ {"level":"error","message":"error: api/account - Method: create: The provided password does not comply to the password policy"}
9
+ {"level":"error","message":"error: api/account - Method: create: The provided password does not comply to the password policy"}
10
+ {"level":"error","message":"error: api/account - Method: create: The provided password does not comply to the password policy"}
11
+ {"level":"error","message":"error: api/account - Method: create: The provided password does not comply to the password policy"}
12
+ {"level":"error","message":"error: api/account - Method: create: The provided password does not comply to the password policy"}
13
+ {"level":"error","message":"error: api/account - Method: create: The provided password does not comply to the password policy"}
14
+ {"level":"error","message":"error: api/account - Method: create: The provided password does not comply to the password policy"}
@@ -0,0 +1,6 @@
1
+ {"level":"error","message":"error: api/tags - Method: create: You are not allowed to access service tags"}
2
+ {"level":"error","message":"error: api/users - Method: create: The provided password does not comply to the password policy"}
3
+ {"level":"error","message":"error: api/users - Method: create: The provided password does not comply to the password policy"}
4
+ {"level":"error","message":"error: api/authorisations - Method: create: You are not allowed to change authorisation on resource"}
5
+ {"level":"error","message":"error: api/authorisations - Method: remove: You are not allowed to change authorisation on subject(s)"}
6
+ {"level":"info","message":"This is a log test"}
@@ -0,0 +1,23 @@
1
+ {"level":"error","message":"error: api/account - Method: create: The provided password does not comply to the password policy"}
2
+ {"level":"error","message":"error: api/account - Method: create: The provided password does not comply to the password policy"}
3
+ {"level":"error","message":"error: api/account - Method: create: The provided password does not comply to the password policy"}
4
+ {"level":"error","message":"error: api/tags - Method: create: You are not allowed to access service tags"}
5
+ {"level":"error","message":"error: api/users - Method: create: The provided password does not comply to the password policy"}
6
+ {"level":"error","message":"error: api/users - Method: create: The provided password does not comply to the password policy"}
7
+ {"level":"error","message":"error: api/authorisations - Method: create: You are not allowed to change authorisation on resource"}
8
+ {"level":"error","message":"error: api/authorisations - Method: remove: You are not allowed to change authorisation on subject(s)"}
9
+ {"level":"info","message":"This is a log test"}
10
+ {"level":"error","message":"error: api/service - Method: create: validation failed"}
11
+ {"level":"error","message":"error: api/service - Method: create: validation failed"}
12
+ {"level":"error","message":"error: api/service - Method: create: validation failed"}
13
+ {"level":"error","message":"error: api/service - Method: create: validation failed"}
14
+ {"level":"error","message":"error: api/storage - Method: get: The specified key does not exist."}
15
+ {"level":"error","message":"error: api/storage - Method: get: The specified key does not exist."}
16
+ {"level":"error","message":"error: api/organisations - Method: create: You are not allowed to access service organisations"}
17
+ {"level":"error","message":"error: api/authorisations - Method: create: You are not allowed to perform create operation on authorisations"}
18
+ {"level":"error","message":"error: api/666168414d1b825f7ae70b7a/storage - Method: get: You are not allowed to access service 666168414d1b825f7ae70b7a/storage"}
19
+ {"level":"error","message":"error: api/666168414d1b825f7ae70b7a/groups - Method: create: You are not allowed to perform create operation on groups"}
20
+ {"level":"error","message":"error: api/666168414d1b825f7ae70b7a/groups - Method: patch: You are not allowed to perform patch operation on groups"}
21
+ {"level":"error","message":"error: api/authorisations - Method: create: You are not allowed to perform create operation on authorisations"}
22
+ {"level":"error","message":"error: api/authorisations - Method: create: You are not allowed to perform create operation on authorisations"}
23
+ {"level":"error","message":"error: api/users - Method: remove: You are not allowed to delete the user undefined"}
@@ -0,0 +1,25 @@
1
+ {"level":"info","message":"This is a log test"}
2
+ {"level":"info","message":"This is a log test"}
3
+ {"level":"error","message":"error: api/account - Method: create: The provided password does not comply to the password policy"}
4
+ {"level":"error","message":"error: api/account - Method: create: The provided password does not comply to the password policy"}
5
+ {"level":"error","message":"error: api/account - Method: create: The provided password does not comply to the password policy"}
6
+ {"level":"error","message":"error: api/tags - Method: create: You are not allowed to access service tags"}
7
+ {"level":"error","message":"error: api/users - Method: create: The provided password does not comply to the password policy"}
8
+ {"level":"error","message":"error: api/users - Method: create: The provided password does not comply to the password policy"}
9
+ {"level":"error","message":"error: api/authorisations - Method: create: You are not allowed to change authorisation on resource"}
10
+ {"level":"error","message":"error: api/authorisations - Method: remove: You are not allowed to change authorisation on subject(s)"}
11
+ {"level":"info","message":"This is a log test"}
12
+ {"level":"error","message":"error: api/service - Method: create: validation failed"}
13
+ {"level":"error","message":"error: api/service - Method: create: validation failed"}
14
+ {"level":"error","message":"error: api/service - Method: create: validation failed"}
15
+ {"level":"error","message":"error: api/service - Method: create: validation failed"}
16
+ {"level":"error","message":"error: api/storage - Method: get: The specified key does not exist."}
17
+ {"level":"error","message":"error: api/storage - Method: get: The specified key does not exist."}
18
+ {"level":"error","message":"error: api/organisations - Method: create: You are not allowed to access service organisations"}
19
+ {"level":"error","message":"error: api/authorisations - Method: create: You are not allowed to perform create operation on authorisations"}
20
+ {"level":"error","message":"error: api/667bf15d0cf7df1907e6875c/storage - Method: get: You are not allowed to access service 667bf15d0cf7df1907e6875c/storage"}
21
+ {"level":"error","message":"error: api/667bf15d0cf7df1907e6875c/groups - Method: create: You are not allowed to perform create operation on groups"}
22
+ {"level":"error","message":"error: api/667bf15d0cf7df1907e6875c/groups - Method: patch: You are not allowed to perform patch operation on groups"}
23
+ {"level":"error","message":"error: api/authorisations - Method: create: You are not allowed to perform create operation on authorisations"}
24
+ {"level":"error","message":"error: api/authorisations - Method: create: You are not allowed to perform create operation on authorisations"}
25
+ {"level":"error","message":"error: api/users - Method: remove: You are not allowed to delete the user undefined"}
@@ -155,7 +155,9 @@ describe('map:grid-source', () => {
155
155
  describe('geotiff', () => {
156
156
  const geotiffOptions = {
157
157
  geotiff: {
158
- url: 'http://kMap.test/data.tif'
158
+ url: 'http://kMap.test/data.tif',
159
+ // because nock doesnt know howto intercept fecth
160
+ forceXHR: true
159
161
  }
160
162
  }
161
163
 
@@ -1,5 +1,6 @@
1
1
  import chai from 'chai'
2
2
  import chailint from 'chai-lint'
3
+ import _ from 'lodash'
3
4
  import { hooks } from '../../../map/api/index.js'
4
5
 
5
6
  const { util, expect } = chai
@@ -65,6 +66,19 @@ describe('map:hooks', () => {
65
66
  })
66
67
 
67
68
  it('convert results as GeoJson', () => {
69
+ const json = [{
70
+ location: { lat: -4, lon: 33 },
71
+ pickedProperty: '1',
72
+ omittedProperty: '1'
73
+ }, {
74
+ location: { lat: 47, lon: -96 },
75
+ pickedProperty: '2',
76
+ omittedProperty: '2'
77
+ }, {
78
+ location: null,
79
+ pickedProperty: '3',
80
+ omittedProperty: '3'
81
+ }]
68
82
  const hook = {
69
83
  type: 'after',
70
84
  params: {
@@ -72,24 +86,56 @@ describe('map:hooks', () => {
72
86
  geoJson: true
73
87
  }
74
88
  },
75
- result: [{
76
- location: { lat: -4, lon: 33 }
77
- }, {
78
- location: { lat: 47, lon: -96 }
79
- }]
89
+ result: _.cloneDeep(json)
80
90
  }
81
91
  hooks.marshallSpatialQuery(hook)
82
- hooks.asGeoJson({ longitudeProperty: 'location.lon', latitudeProperty: 'location.lat' })(hook)
92
+ hooks.asGeoJson({
93
+ longitudeProperty: 'location.lon',
94
+ latitudeProperty: 'location.lat',
95
+ pick: ['pickedProperty'],
96
+ properties: true
97
+ })(hook)
83
98
  expect(hook.result.type).toExist()
84
99
  expect(hook.result.type).to.equal('FeatureCollection')
85
100
  expect(hook.result.features).toExist()
86
101
  expect(hook.result.features.length).to.equal(2)
87
- expect(hook.result.features[0].type).to.equal('Feature')
88
- expect(hook.result.features[0].geometry).toExist()
89
- expect(hook.result.features[0].geometry.type).to.equal('Point')
90
- expect(hook.result.features[0].geometry.coordinates).toExist()
91
- expect(hook.result.features[0].geometry.coordinates).to.deep.equal([33, -4])
92
- expect(hook.result.features[1].geometry.coordinates).to.deep.equal([-96, 47])
102
+ hook.result.features.forEach((feature, index) => {
103
+ expect(feature.type).to.equal('Feature')
104
+ expect(feature.properties).toExist()
105
+ expect(feature.properties.pickedProperty).toExist()
106
+ expect(feature.properties.omittedProperty).beUndefined()
107
+ expect(feature.geometry).toExist()
108
+ expect(feature.geometry.type).to.equal('Point')
109
+ expect(feature.geometry.coordinates).toExist()
110
+ if (index === 0) expect(feature.geometry.coordinates).to.deep.equal([33, -4])
111
+ if (index === 1) expect(feature.geometry.coordinates).to.deep.equal([-96, 47])
112
+ })
113
+ hook.result = _.cloneDeep(json)
114
+ hooks.asGeoJson({
115
+ longitudeProperty: 'location.lon',
116
+ latitudeProperty: 'location.lat',
117
+ omit: ['omittedProperty', 'location'],
118
+ properties: true,
119
+ allowNullGeometries: true,
120
+ asFeatureCollection: false
121
+ })(hook)
122
+ expect(Array.isArray(hook.result)).beTrue()
123
+ expect(hook.result.length).to.equal(3)
124
+ hook.result.forEach((feature, index) => {
125
+ expect(feature.type).to.equal('Feature')
126
+ expect(feature.properties).toExist()
127
+ expect(feature.properties.pickedProperty).toExist()
128
+ expect(feature.properties.omittedProperty).beUndefined()
129
+ if (index === 2) {
130
+ expect(feature.geometry).beNull()
131
+ } else {
132
+ expect(feature.geometry).toExist()
133
+ expect(feature.geometry.type).to.equal('Point')
134
+ expect(feature.geometry.coordinates).toExist()
135
+ if (index === 0) expect(feature.geometry.coordinates).to.deep.equal([33, -4])
136
+ if (index === 1) expect(feature.geometry.coordinates).to.deep.equal([-96, 47])
137
+ }
138
+ })
93
139
  })
94
140
 
95
141
  // Cleanup
@@ -0,0 +1,121 @@
1
+ {"level":"info","message":"Logger configured"}
2
+ {"level":"info","message":"Initializing weacast-gfs plugin"}
3
+ {"level":"info","message":"Initializing gfs-world forecast"}
4
+ {"level":"info","message":"Checking for up-to-date forecast data on gfs-world/u-wind"}
5
+ {"level":"info","message":"Checking for up-to-date forecast data on gfs-world/v-wind"}
6
+ {"level":"info","message":"Completed forecast data update on gfs-world/v-wind"}
7
+ {"level":"info","message":"Completed forecast data update on gfs-world/u-wind"}
8
+ {"level":"error","message":"Cannot check alert 6560edb696964d00e096371b as target probes service is not available"}
9
+ {"level":"error","message":"Cannot check alert 6560edb696964d00e096371b as target probes service is not available"}
10
+ {"level":"error","message":"Cannot check alert 6560edd496964d00e096371d as no data is available for gfs-world"}
11
+ {"level":"error","message":"Cannot check alert 6560edf396964d00e0963c60 as no data is available for features service vigicrues-observations"}
12
+ {"level":"error","message":"error: api/catalog - Method: create: Object with name equals to dummy already exist for service catalog"}
13
+ {"level":"info","message":"Logger configured"}
14
+ {"level":"error","message":"error: api/catalog - Method: create: Object with name equals to dummy already exist for service catalog"}
15
+ {"level":"error","message":"error: api/catalog - Method: create: Object with name equals to dummy already exist for service catalog"}
16
+ {"level":"error","message":"error: api/catalog - Method: create: Object with name equals to dummy already exist for service catalog"}
17
+ {"level":"error","message":"error: api/catalog - Method: create: Object with name equals to dummy already exist for service catalog"}
18
+ {"level":"error","message":"error: api/catalog - Method: create: Object with name equals to dummy already exist for service catalog"}
19
+ {"level":"error","message":"error: api/catalog - Method: patch: No record found for id 'undefined'"}
20
+ {"level":"error","message":"error: api/catalog - Method: remove: No record found for id 'undefined'"}
21
+ {"level":"error","message":"error: api/catalog - Method: patch: No record found for id 'undefined'"}
22
+ {"level":"error","message":"error: api/catalog - Method: remove: No record found for id 'undefined'"}
23
+ {"level":"error","message":"error: api/catalog - Method: create: Object with name equals to dummy already exist for service catalog"}
24
+ {"level":"error","message":"error: api/catalog - Method: patch: No record found for id 'undefined'"}
25
+ {"level":"error","message":"error: api/catalog - Method: remove: No record found for id 'undefined'"}
26
+ {"level":"error","message":"error: api/catalog - Method: patch: No record found for id 'undefined'"}
27
+ {"level":"error","message":"error: api/catalog - Method: create: Object with name equals to dummy already exist for service catalog"}
28
+ {"level":"error","message":"error: api/catalog - Method: patch: No record found for id 'undefined'"}
29
+ {"level":"error","message":"error: api/catalog - Method: remove: No record found for id 'undefined'"}
30
+ {"level":"error","message":"error: api/catalog - Method: patch: No record found for id 'undefined'"}
31
+ {"level":"error","message":"error: api/catalog - Method: patch: No record found for id 'undefined'"}
32
+ {"level":"error","message":"error: api/catalog - Method: create: Object with name equals to dummy already exist for service catalog"}
33
+ {"level":"error","message":"error: api/catalog - Method: patch: No record found for id 'undefined'"}
34
+ {"level":"error","message":"error: api/catalog - Method: remove: No record found for id 'undefined'"}
35
+ {"level":"error","message":"error: api/catalog - Method: patch: No record found for id 'undefined'"}
36
+ {"level":"error","message":"error: api/catalog - Method: patch: No record found for id 'undefined'"}
37
+ {"level":"error","message":"error: api/catalog - Method: patch: No record found for id 'undefined'"}
38
+ {"level":"error","message":"error: api/catalog - Method: create: Object with name equals to dummy already exist for service catalog"}
39
+ {"level":"error","message":"error: api/catalog - Method: patch: No record found for id 'undefined'"}
40
+ {"level":"error","message":"error: api/catalog - Method: remove: No record found for id 'undefined'"}
41
+ {"level":"error","message":"error: api/catalog - Method: patch: No record found for id 'undefined'"}
42
+ {"level":"error","message":"error: api/catalog - Method: remove: No record found for id 'undefined'"}
43
+ {"level":"error","message":"error: api/catalog - Method: patch: No record found for id 'undefined'"}
44
+ {"level":"error","message":"error: api/catalog - Method: patch: No record found for id 'undefined'"}
45
+ {"level":"error","message":"error: api/catalog - Method: patch: No record found for id 'undefined'"}
46
+ {"level":"error","message":"error: api/catalog - Method: patch: No record found for id 'undefined'"}
47
+ {"level":"error","message":"error: api/catalog - Method: create: Object with name equals to dummy already exist for service catalog"}
48
+ {"level":"error","message":"error: api/catalog - Method: get: No record found for id '6560f5105b2896094bc3ade3'"}
49
+ {"level":"error","message":"error: api/catalog - Method: patch: No record found for id '6560f5105b2896094bc3ade3'"}
50
+ {"level":"error","message":"error: api/catalog - Method: remove: No record found for id '6560f5105b2896094bc3ade3'"}
51
+ {"level":"error","message":"error: api/catalog - Method: get: No record found for id '6560f23fa730c1065eb2b261'"}
52
+ {"level":"error","message":"error: api/catalog - Method: get: No record found for id '6560f5105b2896094bc3ade3'"}
53
+ {"level":"error","message":"error: api/catalog - Method: patch: No record found for id '6560f23fa730c1065eb2b261'"}
54
+ {"level":"error","message":"error: api/catalog - Method: patch: No record found for id '6560f5105b2896094bc3ade3'"}
55
+ {"level":"error","message":"error: api/catalog - Method: remove: No record found for id '6560f23fa730c1065eb2b261'"}
56
+ {"level":"error","message":"error: api/catalog - Method: get: No record found for id '6560f2bf3b373006d417a79e'"}
57
+ {"level":"error","message":"error: api/catalog - Method: patch: No record found for id '6560f2bf3b373006d417a79e'"}
58
+ {"level":"error","message":"error: api/catalog - Method: get: No record found for id '6560f4329491dd0826567006'"}
59
+ {"level":"error","message":"error: api/catalog - Method: patch: No record found for id '6560f4329491dd0826567006'"}
60
+ {"level":"error","message":"error: api/catalog - Method: get: No record found for id '6560f314fa31230723811b92'"}
61
+ {"level":"error","message":"error: api/catalog - Method: patch: No record found for id '6560f314fa31230723811b92'"}
62
+ {"level":"error","message":"error: api/catalog - Method: get: No record found for id '6560f3adac425907a6623eab'"}
63
+ {"level":"error","message":"error: api/catalog - Method: patch: No record found for id '6560f3adac425907a6623eab'"}
64
+ {"level":"error","message":"error: api/catalog - Method: create: Object with name equals to dummy already exist for service catalog"}
65
+ {"level":"error","message":"error: api/catalog - Method: get: No record found for id '6560f52d121e4409a04c3727'"}
66
+ {"level":"error","message":"error: api/catalog - Method: patch: No record found for id '6560f52d121e4409a04c3727'"}
67
+ {"level":"error","message":"error: api/catalog - Method: remove: No record found for id '6560f52d121e4409a04c3727'"}
68
+ {"level":"error","message":"error: api/catalog - Method: get: No record found for id '6560f3adac425907a6623eab'"}
69
+ {"level":"error","message":"error: api/catalog - Method: patch: No record found for id '6560f3adac425907a6623eab'"}
70
+ {"level":"error","message":"error: api/catalog - Method: remove: No record found for id '6560f3adac425907a6623eab'"}
71
+ {"level":"error","message":"error: api/catalog - Method: get: No record found for id '6560f23fa730c1065eb2b261'"}
72
+ {"level":"error","message":"error: api/catalog - Method: get: No record found for id '6560f5105b2896094bc3ade3'"}
73
+ {"level":"error","message":"error: api/catalog - Method: patch: No record found for id '6560f23fa730c1065eb2b261'"}
74
+ {"level":"error","message":"error: api/catalog - Method: patch: No record found for id '6560f5105b2896094bc3ade3'"}
75
+ {"level":"error","message":"error: api/catalog - Method: get: No record found for id '6560f314fa31230723811b92'"}
76
+ {"level":"error","message":"error: api/catalog - Method: get: No record found for id '6560f52d121e4409a04c3727'"}
77
+ {"level":"error","message":"error: api/catalog - Method: patch: No record found for id '6560f314fa31230723811b92'"}
78
+ {"level":"error","message":"error: api/catalog - Method: patch: No record found for id '6560f52d121e4409a04c3727'"}
79
+ {"level":"error","message":"error: api/catalog - Method: get: No record found for id '6560f2bf3b373006d417a79e'"}
80
+ {"level":"error","message":"error: api/catalog - Method: patch: No record found for id '6560f2bf3b373006d417a79e'"}
81
+ {"level":"error","message":"error: api/catalog - Method: get: No record found for id '6560f4329491dd0826567006'"}
82
+ {"level":"error","message":"error: api/catalog - Method: patch: No record found for id '6560f4329491dd0826567006'"}
83
+ {"level":"error","message":"error: api/catalog - Method: create: Object with name equals to dummy already exist for service catalog"}
84
+ {"level":"error","message":"error: api/catalog - Method: get: No record found for id '6560f5d187faf30a2c89bae1'"}
85
+ {"level":"error","message":"error: api/catalog - Method: patch: No record found for id '6560f5d187faf30a2c89bae1'"}
86
+ {"level":"error","message":"error: api/catalog - Method: remove: No record found for id '6560f5d187faf30a2c89bae1'"}
87
+ {"level":"error","message":"error: api/catalog - Method: remove: Cannot read properties of undefined (reading '_id')"}
88
+ {"level":"error","message":"error: api/catalog - Method: create: Object with name equals to dummy already exist for service catalog"}
89
+ {"level":"error","message":"error: api/catalog - Method: get: No record found for id '6560f5d4a6d8650a5b17cbf4'"}
90
+ {"level":"error","message":"error: api/catalog - Method: patch: No record found for id '6560f5d4a6d8650a5b17cbf4'"}
91
+ {"level":"error","message":"error: api/catalog - Method: remove: No record found for id '6560f5d4a6d8650a5b17cbf4'"}
92
+ {"level":"error","message":"error: api/catalog - Method: remove: Cannot read properties of undefined (reading '_id')"}
93
+ {"level":"error","message":"error: api/catalog - Method: create: Object with name equals to dummy already exist for service catalog"}
94
+ {"level":"error","message":"error: api/catalog - Method: get: No record found for id '6560f5fef875210ab381de76'"}
95
+ {"level":"error","message":"error: api/catalog - Method: patch: No record found for id '6560f5fef875210ab381de76'"}
96
+ {"level":"error","message":"error: api/catalog - Method: remove: No record found for id '6560f5fef875210ab381de76'"}
97
+ {"level":"error","message":"error: api/catalog - Method: remove: Cannot read properties of undefined (reading '_id')"}
98
+ {"level":"error","message":"error: api/catalog - Method: create: Object with name equals to dummy already exist for service catalog"}
99
+ {"level":"error","message":"error: api/catalog - Method: remove: Cannot read properties of undefined (reading '_id')"}
100
+ {"level":"error","message":"error: api/catalog - Method: create: Object with name equals to dummy already exist for service catalog"}
101
+ {"level":"error","message":"error: api/catalog - Method: remove: Cannot read properties of undefined (reading '_id')"}
102
+ {"level":"error","message":"error: api/catalog - Method: create: Object with name equals to dummy already exist for service catalog"}
103
+ {"level":"error","message":"error: api/catalog - Method: remove: Cannot read properties of undefined (reading '_id')"}
104
+ {"level":"error","message":"error: api/catalog - Method: create: Object with name equals to dummy already exist for service catalog"}
105
+ {"level":"error","message":"error: api/catalog - Method: create: Object with name equals to dummy already exist for service catalog"}
106
+ {"level":"error","message":"error: api/catalog - Method: create: Object with name equals to dummy already exist for service catalog"}
107
+ {"level":"error","message":"error: api/catalog - Method: create: Object with name equals to dummy already exist for service catalog"}
108
+ {"level":"error","message":"error: api/catalog - Method: create: Object with name equals to dummy already exist for service catalog"}
109
+ {"level":"error","message":"error: api/catalog - Method: create: Object with name equals to dummy already exist for service catalog"}
110
+ {"level":"error","message":"error: api/catalog - Method: create: Object with name equals to dummy already exist for service catalog"}
111
+ {"level":"error","message":"error: api/catalog - Method: remove: Cannot read properties of undefined (reading 'toString')"}
112
+ {"level":"error","message":"error: api/catalog - Method: remove: Cannot read properties of undefined (reading 'toString')"}
113
+ {"level":"error","message":"error: api/catalog - Method: create: Object with name equals to dummy already exist for service catalog"}
114
+ {"level":"error","message":"error: api/catalog - Method: remove: Assignment to constant variable."}
115
+ {"level":"error","message":"error: api/catalog - Method: remove: Assignment to constant variable."}
116
+ {"level":"error","message":"error: api/catalog - Method: remove: Cannot read properties of undefined (reading 'toString')"}
117
+ {"level":"error","message":"error: api/catalog - Method: create: Object with name equals to dummy already exist for service catalog"}
118
+ {"level":"error","message":"error: api/catalog - Method: remove: Cannot read properties of undefined (reading 'toString')"}
119
+ {"level":"error","message":"error: api/catalog - Method: remove: Cannot read properties of undefined (reading 'toString')"}
120
+ {"level":"error","message":"error: api/catalog - Method: create: Object with name equals to dummy already exist for service catalog"}
121
+ {"level":"error","message":"error: api/catalog - Method: create: Object with name equals to dummy already exist for service catalog"}