@kalisio/kdk 1.4.2 → 1.6.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 (410) hide show
  1. package/.nyc_output/02a7a308-a8d7-4cc6-8e61-6066a0055a96.json +1 -0
  2. package/.nyc_output/1900d596-5e87-433a-8fd6-fb7f7ded35ec.json +1 -0
  3. package/.nyc_output/{2e74ca23-8cf0-4161-9536-f71c2a1a74bb.json → 27401f21-8ccf-42fa-8230-4232189d86b3.json} +0 -0
  4. package/.nyc_output/{81d21e46-766a-46bc-b1b7-143ca577347a.json → 52278ef5-c337-4724-97be-e2e4416847c5.json} +0 -0
  5. package/.nyc_output/{aaf3ebbb-f895-4d7b-9255-bc5dee832570.json → 5dd49b8a-4c84-42f9-a3d5-712247a84775.json} +0 -0
  6. package/.nyc_output/{dbeb2602-0ac2-4e66-978b-0d29548359ca.json → 612b4859-9645-45c1-a41e-1fae420518c4.json} +0 -0
  7. package/.nyc_output/{e47d1e4c-2fff-4dcb-908f-d3081162547c.json → bab87fe9-d99a-4759-99e6-3fc4622eeca0.json} +0 -0
  8. package/.nyc_output/processinfo/02a7a308-a8d7-4cc6-8e61-6066a0055a96.json +1 -0
  9. package/.nyc_output/processinfo/1900d596-5e87-433a-8fd6-fb7f7ded35ec.json +1 -0
  10. package/.nyc_output/processinfo/27401f21-8ccf-42fa-8230-4232189d86b3.json +1 -0
  11. package/.nyc_output/processinfo/52278ef5-c337-4724-97be-e2e4416847c5.json +1 -0
  12. package/.nyc_output/processinfo/5dd49b8a-4c84-42f9-a3d5-712247a84775.json +1 -0
  13. package/.nyc_output/processinfo/612b4859-9645-45c1-a41e-1fae420518c4.json +1 -0
  14. package/.nyc_output/processinfo/bab87fe9-d99a-4759-99e6-3fc4622eeca0.json +1 -0
  15. package/.nyc_output/processinfo/index.json +1 -1
  16. package/CHANGELOG.md +69 -10
  17. package/coverage/core/api/application.js.html +500 -422
  18. package/coverage/core/api/authentication.js.html +119 -119
  19. package/coverage/core/api/db.js.html +172 -172
  20. package/coverage/core/api/hooks/hooks.account.js.html +45 -45
  21. package/coverage/core/api/hooks/hooks.authentication.js.html +71 -71
  22. package/coverage/core/api/hooks/hooks.authorisations.js.html +368 -353
  23. package/coverage/core/api/hooks/hooks.devices.js.html +49 -49
  24. package/coverage/core/api/hooks/hooks.groups.js.html +37 -37
  25. package/coverage/core/api/hooks/hooks.logger.js.html +27 -27
  26. package/coverage/core/api/hooks/hooks.model.js.html +269 -269
  27. package/coverage/core/api/hooks/hooks.organisations.js.html +190 -190
  28. package/coverage/core/api/hooks/hooks.pusher.js.html +114 -114
  29. package/coverage/core/api/hooks/hooks.query.js.html +277 -211
  30. package/coverage/core/api/hooks/hooks.service.js.html +82 -82
  31. package/coverage/core/api/hooks/hooks.storage.js.html +121 -121
  32. package/coverage/core/api/hooks/hooks.tags.js.html +232 -232
  33. package/coverage/core/api/hooks/hooks.users.js.html +263 -263
  34. package/coverage/core/api/hooks/index.html +172 -172
  35. package/coverage/core/api/hooks/index.js.html +24 -24
  36. package/coverage/core/api/index.html +76 -76
  37. package/coverage/core/api/index.js.html +30 -30
  38. package/coverage/core/api/marshall.js.html +57 -57
  39. package/coverage/core/api/models/groups.model.mongodb.js.html +20 -20
  40. package/coverage/core/api/models/index.html +50 -50
  41. package/coverage/core/api/models/organisations.model.mongodb.js.html +12 -12
  42. package/coverage/core/api/models/tags.model.mongodb.js.html +22 -22
  43. package/coverage/core/api/models/users.model.mongodb.js.html +20 -20
  44. package/coverage/core/api/oauth2-handler.js.html +18 -18
  45. package/coverage/core/api/oauth2-verifier.js.html +38 -38
  46. package/coverage/core/api/services/account/account.hooks.js.html +16 -16
  47. package/coverage/core/api/services/account/account.service.js.html +104 -104
  48. package/coverage/core/api/services/account/index.html +32 -32
  49. package/coverage/core/api/services/authorisations/authorisations.hooks.js.html +9 -9
  50. package/coverage/core/api/services/authorisations/authorisations.service.js.html +156 -132
  51. package/coverage/core/api/services/authorisations/index.html +28 -28
  52. package/coverage/core/api/services/databases/databases.hooks.js.html +9 -9
  53. package/coverage/core/api/services/databases/databases.service.js.html +12 -12
  54. package/coverage/core/api/services/databases/index.html +24 -24
  55. package/coverage/core/api/services/devices/devices.hooks.js.html +9 -9
  56. package/coverage/core/api/services/devices/devices.service.js.html +121 -121
  57. package/coverage/core/api/services/devices/index.html +28 -28
  58. package/coverage/core/api/services/groups/groups.hooks.js.html +9 -9
  59. package/coverage/core/api/services/groups/index.html +13 -13
  60. package/coverage/core/api/services/index.html +21 -21
  61. package/coverage/core/api/services/index.js.html +118 -118
  62. package/coverage/core/api/services/mailer/index.html +24 -24
  63. package/coverage/core/api/services/mailer/mailer.hooks.js.html +9 -9
  64. package/coverage/core/api/services/mailer/mailer.service.js.html +19 -19
  65. package/coverage/core/api/services/organisations/index.html +24 -24
  66. package/coverage/core/api/services/organisations/organisations.hooks.js.html +8 -8
  67. package/coverage/core/api/services/organisations/organisations.service.js.html +67 -67
  68. package/coverage/core/api/services/pusher/index.html +34 -34
  69. package/coverage/core/api/services/pusher/pusher.channels.js.html +8 -8
  70. package/coverage/core/api/services/pusher/pusher.hooks.js.html +10 -10
  71. package/coverage/core/api/services/pusher/pusher.service.js.html +414 -414
  72. package/coverage/core/api/services/storage/index.html +21 -21
  73. package/coverage/core/api/services/storage/storage.hooks.js.html +35 -35
  74. package/coverage/core/api/services/tags/index.html +21 -21
  75. package/coverage/core/api/services/tags/tags.hooks.js.html +25 -25
  76. package/coverage/core/api/services/users/index.html +21 -21
  77. package/coverage/core/api/services/users/users.hooks.js.html +33 -33
  78. package/coverage/core/common/errors.js.html +1 -1
  79. package/coverage/core/common/index.html +42 -27
  80. package/coverage/core/common/index.js.html +16 -16
  81. package/coverage/core/common/permissions.js.html +320 -290
  82. package/coverage/index.html +181 -181
  83. package/coverage/lcov-report/core/api/application.js.html +500 -422
  84. package/coverage/lcov-report/core/api/authentication.js.html +119 -119
  85. package/coverage/lcov-report/core/api/db.js.html +172 -172
  86. package/coverage/lcov-report/core/api/hooks/hooks.account.js.html +45 -45
  87. package/coverage/lcov-report/core/api/hooks/hooks.authentication.js.html +71 -71
  88. package/coverage/lcov-report/core/api/hooks/hooks.authorisations.js.html +368 -353
  89. package/coverage/lcov-report/core/api/hooks/hooks.devices.js.html +49 -49
  90. package/coverage/lcov-report/core/api/hooks/hooks.groups.js.html +37 -37
  91. package/coverage/lcov-report/core/api/hooks/hooks.logger.js.html +27 -27
  92. package/coverage/lcov-report/core/api/hooks/hooks.model.js.html +269 -269
  93. package/coverage/lcov-report/core/api/hooks/hooks.organisations.js.html +190 -190
  94. package/coverage/lcov-report/core/api/hooks/hooks.pusher.js.html +114 -114
  95. package/coverage/lcov-report/core/api/hooks/hooks.query.js.html +277 -211
  96. package/coverage/lcov-report/core/api/hooks/hooks.service.js.html +82 -82
  97. package/coverage/lcov-report/core/api/hooks/hooks.storage.js.html +121 -121
  98. package/coverage/lcov-report/core/api/hooks/hooks.tags.js.html +232 -232
  99. package/coverage/lcov-report/core/api/hooks/hooks.users.js.html +263 -263
  100. package/coverage/lcov-report/core/api/hooks/index.html +172 -172
  101. package/coverage/lcov-report/core/api/hooks/index.js.html +24 -24
  102. package/coverage/lcov-report/core/api/index.html +76 -76
  103. package/coverage/lcov-report/core/api/index.js.html +30 -30
  104. package/coverage/lcov-report/core/api/marshall.js.html +57 -57
  105. package/coverage/lcov-report/core/api/models/groups.model.mongodb.js.html +20 -20
  106. package/coverage/lcov-report/core/api/models/index.html +50 -50
  107. package/coverage/lcov-report/core/api/models/organisations.model.mongodb.js.html +12 -12
  108. package/coverage/lcov-report/core/api/models/tags.model.mongodb.js.html +22 -22
  109. package/coverage/lcov-report/core/api/models/users.model.mongodb.js.html +20 -20
  110. package/coverage/lcov-report/core/api/oauth2-handler.js.html +18 -18
  111. package/coverage/lcov-report/core/api/oauth2-verifier.js.html +38 -38
  112. package/coverage/lcov-report/core/api/services/account/account.hooks.js.html +16 -16
  113. package/coverage/lcov-report/core/api/services/account/account.service.js.html +104 -104
  114. package/coverage/lcov-report/core/api/services/account/index.html +32 -32
  115. package/coverage/lcov-report/core/api/services/authorisations/authorisations.hooks.js.html +9 -9
  116. package/coverage/lcov-report/core/api/services/authorisations/authorisations.service.js.html +156 -132
  117. package/coverage/lcov-report/core/api/services/authorisations/index.html +28 -28
  118. package/coverage/lcov-report/core/api/services/databases/databases.hooks.js.html +9 -9
  119. package/coverage/lcov-report/core/api/services/databases/databases.service.js.html +12 -12
  120. package/coverage/lcov-report/core/api/services/databases/index.html +24 -24
  121. package/coverage/lcov-report/core/api/services/devices/devices.hooks.js.html +9 -9
  122. package/coverage/lcov-report/core/api/services/devices/devices.service.js.html +121 -121
  123. package/coverage/lcov-report/core/api/services/devices/index.html +28 -28
  124. package/coverage/lcov-report/core/api/services/groups/groups.hooks.js.html +9 -9
  125. package/coverage/lcov-report/core/api/services/groups/index.html +13 -13
  126. package/coverage/lcov-report/core/api/services/index.html +21 -21
  127. package/coverage/lcov-report/core/api/services/index.js.html +118 -118
  128. package/coverage/lcov-report/core/api/services/mailer/index.html +24 -24
  129. package/coverage/lcov-report/core/api/services/mailer/mailer.hooks.js.html +9 -9
  130. package/coverage/lcov-report/core/api/services/mailer/mailer.service.js.html +19 -19
  131. package/coverage/lcov-report/core/api/services/organisations/index.html +24 -24
  132. package/coverage/lcov-report/core/api/services/organisations/organisations.hooks.js.html +8 -8
  133. package/coverage/lcov-report/core/api/services/organisations/organisations.service.js.html +67 -67
  134. package/coverage/lcov-report/core/api/services/pusher/index.html +34 -34
  135. package/coverage/lcov-report/core/api/services/pusher/pusher.channels.js.html +8 -8
  136. package/coverage/lcov-report/core/api/services/pusher/pusher.hooks.js.html +10 -10
  137. package/coverage/lcov-report/core/api/services/pusher/pusher.service.js.html +414 -414
  138. package/coverage/lcov-report/core/api/services/storage/index.html +21 -21
  139. package/coverage/lcov-report/core/api/services/storage/storage.hooks.js.html +35 -35
  140. package/coverage/lcov-report/core/api/services/tags/index.html +21 -21
  141. package/coverage/lcov-report/core/api/services/tags/tags.hooks.js.html +25 -25
  142. package/coverage/lcov-report/core/api/services/users/index.html +21 -21
  143. package/coverage/lcov-report/core/api/services/users/users.hooks.js.html +33 -33
  144. package/coverage/lcov-report/core/common/errors.js.html +1 -1
  145. package/coverage/lcov-report/core/common/index.html +42 -27
  146. package/coverage/lcov-report/core/common/index.js.html +16 -16
  147. package/coverage/lcov-report/core/common/permissions.js.html +320 -290
  148. package/coverage/lcov-report/index.html +181 -181
  149. package/coverage/lcov-report/map/api/hooks/hooks.catalog.js.html +1 -1
  150. package/coverage/lcov-report/map/api/hooks/hooks.query.js.html +25 -7
  151. package/coverage/lcov-report/map/api/hooks/index.html +7 -7
  152. package/coverage/lcov-report/map/api/hooks/index.js.html +1 -1
  153. package/coverage/lcov-report/map/api/index.html +1 -1
  154. package/coverage/lcov-report/map/api/index.js.html +1 -1
  155. package/coverage/lcov-report/map/api/marshall.js.html +1 -1
  156. package/coverage/lcov-report/map/api/models/alerts.model.mongodb.js.html +1 -1
  157. package/coverage/lcov-report/map/api/models/catalog.model.mongodb.js.html +1 -1
  158. package/coverage/lcov-report/map/api/models/features.model.mongodb.js.html +14 -5
  159. package/coverage/lcov-report/map/api/models/index.html +7 -7
  160. package/coverage/lcov-report/map/api/services/alerts/alerts.hooks.js.html +1 -1
  161. package/coverage/lcov-report/map/api/services/alerts/alerts.service.js.html +1 -1
  162. package/coverage/lcov-report/map/api/services/alerts/index.html +1 -1
  163. package/coverage/lcov-report/map/api/services/catalog/catalog.hooks.js.html +1 -1
  164. package/coverage/lcov-report/map/api/services/catalog/index.html +1 -1
  165. package/coverage/lcov-report/map/api/services/daptiles/daptiles.service.js.html +1 -1
  166. package/coverage/lcov-report/map/api/services/daptiles/index.html +1 -1
  167. package/coverage/lcov-report/map/api/services/features/features.hooks.js.html +1 -1
  168. package/coverage/lcov-report/map/api/services/features/index.html +1 -1
  169. package/coverage/lcov-report/map/api/services/geocoder/geocoder.hooks.js.html +1 -1
  170. package/coverage/lcov-report/map/api/services/geocoder/geocoder.service.js.html +1 -1
  171. package/coverage/lcov-report/map/api/services/geocoder/index.html +1 -1
  172. package/coverage/lcov-report/map/api/services/index.html +1 -1
  173. package/coverage/lcov-report/map/api/services/index.js.html +1 -1
  174. package/coverage/lcov-report/map/common/dynamic-grid-source.js.html +1 -1
  175. package/coverage/lcov-report/map/common/errors.js.html +1 -1
  176. package/coverage/lcov-report/map/common/geotiff-grid-source.js.html +1 -1
  177. package/coverage/lcov-report/map/common/grid.js.html +1 -1
  178. package/coverage/lcov-report/map/common/index.html +1 -1
  179. package/coverage/lcov-report/map/common/index.js.html +1 -1
  180. package/coverage/lcov-report/map/common/meteo-model-grid-source.js.html +1 -1
  181. package/coverage/lcov-report/map/common/moment-utils.js.html +1 -1
  182. package/coverage/lcov-report/map/common/opendap-grid-source.js.html +1 -1
  183. package/coverage/lcov-report/map/common/opendap-utils.js.html +1 -1
  184. package/coverage/lcov-report/map/common/permissions.js.html +1 -1
  185. package/coverage/lcov-report/map/common/time-based-grid-source.js.html +1 -1
  186. package/coverage/lcov-report/map/common/tms-utils.js.html +1 -1
  187. package/coverage/lcov-report/map/common/wcs-grid-source.js.html +1 -1
  188. package/coverage/lcov-report/map/common/wcs-utils.js.html +1 -1
  189. package/coverage/lcov-report/map/common/weacast-grid-source.js.html +1 -1
  190. package/coverage/lcov-report/map/common/wfs-utils.js.html +1 -1
  191. package/coverage/lcov-report/map/common/wms-utils.js.html +1 -1
  192. package/coverage/lcov-report/map/common/wmts-utils.js.html +1 -1
  193. package/coverage/lcov.info +3683 -3825
  194. package/coverage/map/api/hooks/hooks.catalog.js.html +1 -1
  195. package/coverage/map/api/hooks/hooks.query.js.html +25 -7
  196. package/coverage/map/api/hooks/index.html +7 -7
  197. package/coverage/map/api/hooks/index.js.html +1 -1
  198. package/coverage/map/api/index.html +1 -1
  199. package/coverage/map/api/index.js.html +1 -1
  200. package/coverage/map/api/marshall.js.html +1 -1
  201. package/coverage/map/api/models/alerts.model.mongodb.js.html +1 -1
  202. package/coverage/map/api/models/catalog.model.mongodb.js.html +1 -1
  203. package/coverage/map/api/models/features.model.mongodb.js.html +14 -5
  204. package/coverage/map/api/models/index.html +7 -7
  205. package/coverage/map/api/services/alerts/alerts.hooks.js.html +1 -1
  206. package/coverage/map/api/services/alerts/alerts.service.js.html +1 -1
  207. package/coverage/map/api/services/alerts/index.html +1 -1
  208. package/coverage/map/api/services/catalog/catalog.hooks.js.html +1 -1
  209. package/coverage/map/api/services/catalog/index.html +1 -1
  210. package/coverage/map/api/services/daptiles/daptiles.service.js.html +1 -1
  211. package/coverage/map/api/services/daptiles/index.html +1 -1
  212. package/coverage/map/api/services/features/features.hooks.js.html +1 -1
  213. package/coverage/map/api/services/features/index.html +1 -1
  214. package/coverage/map/api/services/geocoder/geocoder.hooks.js.html +1 -1
  215. package/coverage/map/api/services/geocoder/geocoder.service.js.html +1 -1
  216. package/coverage/map/api/services/geocoder/index.html +1 -1
  217. package/coverage/map/api/services/index.html +1 -1
  218. package/coverage/map/api/services/index.js.html +1 -1
  219. package/coverage/map/common/dynamic-grid-source.js.html +1 -1
  220. package/coverage/map/common/errors.js.html +1 -1
  221. package/coverage/map/common/geotiff-grid-source.js.html +1 -1
  222. package/coverage/map/common/grid.js.html +1 -1
  223. package/coverage/map/common/index.html +1 -1
  224. package/coverage/map/common/index.js.html +1 -1
  225. package/coverage/map/common/meteo-model-grid-source.js.html +1 -1
  226. package/coverage/map/common/moment-utils.js.html +1 -1
  227. package/coverage/map/common/opendap-grid-source.js.html +1 -1
  228. package/coverage/map/common/opendap-utils.js.html +1 -1
  229. package/coverage/map/common/permissions.js.html +1 -1
  230. package/coverage/map/common/time-based-grid-source.js.html +1 -1
  231. package/coverage/map/common/tms-utils.js.html +1 -1
  232. package/coverage/map/common/wcs-grid-source.js.html +1 -1
  233. package/coverage/map/common/wcs-utils.js.html +1 -1
  234. package/coverage/map/common/weacast-grid-source.js.html +1 -1
  235. package/coverage/map/common/wfs-utils.js.html +1 -1
  236. package/coverage/map/common/wms-utils.js.html +1 -1
  237. package/coverage/map/common/wmts-utils.js.html +1 -1
  238. package/extras/tours/map/navigation-bar.js +49 -1
  239. package/lib/core/api/application.js +35 -9
  240. package/lib/core/api/application.js.map +1 -1
  241. package/lib/core/api/hooks/hooks.authorisations.js +8 -1
  242. package/lib/core/api/hooks/hooks.authorisations.js.map +1 -1
  243. package/lib/core/api/hooks/hooks.query.js +135 -100
  244. package/lib/core/api/hooks/hooks.query.js.map +1 -1
  245. package/lib/core/api/services/authorisations/authorisations.service.js +13 -1
  246. package/lib/core/api/services/authorisations/authorisations.service.js.map +1 -1
  247. package/lib/core/api/services/pusher/pusher.service.js +40 -16
  248. package/lib/core/api/services/pusher/pusher.service.js.map +1 -1
  249. package/lib/core/client/components/collection/KColumn.vue +29 -28
  250. package/lib/core/client/components/collection/KFilter.vue +97 -72
  251. package/lib/core/client/components/editor/KModalEditor.vue +3 -4
  252. package/lib/core/client/components/editor/KSettingsEditor.vue +6 -2
  253. package/lib/core/client/components/form/KFileField.vue +14 -36
  254. package/lib/core/client/components/form/KRoleField.vue +5 -2
  255. package/lib/core/client/components/form/KTextField.vue +12 -2
  256. package/lib/core/client/components/form/KUnitField.vue +57 -0
  257. package/lib/core/client/components/form/KUrlField.vue +1 -1
  258. package/lib/core/client/components/frame/KAction.vue +1 -2
  259. package/lib/core/client/components/frame/KModal.vue +66 -20
  260. package/lib/core/client/components/frame/KScrollArea.vue +65 -0
  261. package/lib/core/client/components/frame/index.js +6 -1
  262. package/lib/core/client/components/frame/index.js.map +1 -1
  263. package/lib/core/client/components/input/KColorChooser.vue +3 -5
  264. package/lib/core/client/components/input/KIconChooser.vue +38 -40
  265. package/lib/core/client/components/input/KOptionsChooser.vue +2 -2
  266. package/lib/core/client/components/layout/KAbout.vue +47 -49
  267. package/lib/core/client/components/team/KAddMember.vue +1 -1
  268. package/lib/core/client/components/team/KChangeRole.vue +11 -14
  269. package/lib/core/client/components/team/KGroupCard.vue +12 -5
  270. package/lib/core/client/components/team/KGroupsActivity.vue +1 -1
  271. package/lib/core/client/components/team/KJoinGroup.vue +22 -22
  272. package/lib/core/client/components/team/KMemberCard.vue +19 -4
  273. package/lib/core/client/components/viewer/KModalViewer.vue +10 -9
  274. package/lib/core/client/i18n/core_en.json +72 -8
  275. package/lib/core/client/i18n/core_fr.json +66 -8
  276. package/lib/core/client/index.js +31 -0
  277. package/lib/core/client/index.js.map +1 -1
  278. package/lib/core/client/layout.js +8 -1
  279. package/lib/core/client/layout.js.map +1 -1
  280. package/lib/core/client/mixins/mixin.base-widget.js +5 -3
  281. package/lib/core/client/mixins/mixin.base-widget.js.map +1 -1
  282. package/lib/core/client/reader.js +85 -0
  283. package/lib/core/client/reader.js.map +1 -0
  284. package/lib/core/client/readers/index.js +30 -0
  285. package/lib/core/client/readers/index.js.map +1 -0
  286. package/lib/core/client/readers/reader.csv.js +54 -0
  287. package/lib/core/client/readers/reader.csv.js.map +1 -0
  288. package/lib/core/client/readers/reader.json.js +49 -0
  289. package/lib/core/client/readers/reader.json.js.map +1 -0
  290. package/lib/core/client/services/index.js +14 -3
  291. package/lib/core/client/services/index.js.map +1 -1
  292. package/lib/core/client/services/local-settings.service.js +6 -4
  293. package/lib/core/client/services/local-settings.service.js.map +1 -1
  294. package/lib/core/client/time.js +4 -3
  295. package/lib/core/client/time.js.map +1 -1
  296. package/lib/core/client/units.js +195 -0
  297. package/lib/core/client/units.js.map +1 -0
  298. package/lib/core/common/permissions.js +44 -34
  299. package/lib/core/common/permissions.js.map +1 -1
  300. package/lib/core/common/schemas/settings.update.json +72 -0
  301. package/lib/map/api/hooks/hooks.query.js +7 -2
  302. package/lib/map/api/hooks/hooks.query.js.map +1 -1
  303. package/lib/map/api/models/features.model.mongodb.js +3 -0
  304. package/lib/map/api/models/features.model.mongodb.js.map +1 -1
  305. package/lib/map/client/components/KCaptureToolbar.vue +151 -0
  306. package/lib/map/client/components/KColorLegend.vue +16 -4
  307. package/lib/map/client/components/KFeaturesChart.vue +10 -11
  308. package/lib/map/client/components/KFeaturesFilter.vue +40 -39
  309. package/lib/map/client/components/KFeaturesTable.vue +15 -16
  310. package/lib/map/client/components/KLayerEditionToolbar.vue +19 -11
  311. package/lib/map/client/components/KLayerStyleEditor.vue +3 -2
  312. package/lib/map/client/components/KLayerStyleForm.vue +38 -27
  313. package/lib/map/client/components/KMeasureTool.vue +337 -0
  314. package/lib/map/client/components/KTimeline.vue +5 -9
  315. package/lib/map/client/components/catalog/KAddLayer.vue +3 -2
  316. package/lib/map/client/components/catalog/KCatalog.vue +26 -7
  317. package/lib/map/client/components/catalog/KImportLayer.vue +8 -35
  318. package/lib/map/client/components/catalog/KLayerCategories.vue +3 -2
  319. package/lib/map/client/components/catalog/KLayersSelector.vue +8 -6
  320. package/lib/map/client/components/catalog/KWeatherLayersSelector.vue +1 -1
  321. package/lib/map/client/components/widget/KInformationBox.vue +8 -17
  322. package/lib/map/client/components/widget/KMapillaryViewer.vue +5 -1
  323. package/lib/map/client/components/widget/KTimeSeries.vue +92 -9
  324. package/lib/map/client/i18n/map_en.json +51 -20
  325. package/lib/map/client/i18n/map_fr.json +51 -20
  326. package/lib/map/client/init.js +7 -1
  327. package/lib/map/client/init.js.map +1 -1
  328. package/lib/map/client/leaflet/MaskLayer.js +9 -0
  329. package/lib/map/client/leaflet/MaskLayer.js.map +1 -1
  330. package/lib/map/client/mixins/globe/mixin.base-globe.js +3 -5
  331. package/lib/map/client/mixins/globe/mixin.base-globe.js.map +1 -1
  332. package/lib/map/client/mixins/globe/mixin.geojson-layers.js +16 -21
  333. package/lib/map/client/mixins/globe/mixin.geojson-layers.js.map +1 -1
  334. package/lib/map/client/mixins/globe/mixin.popup.js +7 -1
  335. package/lib/map/client/mixins/globe/mixin.popup.js.map +1 -1
  336. package/lib/map/client/mixins/globe/mixin.tooltip.js +7 -1
  337. package/lib/map/client/mixins/globe/mixin.tooltip.js.map +1 -1
  338. package/lib/map/client/mixins/map/mixin.base-map.js +54 -9
  339. package/lib/map/client/mixins/map/mixin.base-map.js.map +1 -1
  340. package/lib/map/client/mixins/map/mixin.canvas-layers.js +2 -0
  341. package/lib/map/client/mixins/map/mixin.canvas-layers.js.map +1 -1
  342. package/lib/map/client/mixins/map/mixin.file-layers.js +51 -97
  343. package/lib/map/client/mixins/map/mixin.file-layers.js.map +1 -1
  344. package/lib/map/client/mixins/map/mixin.geojson-layers.js +43 -11
  345. package/lib/map/client/mixins/map/mixin.geojson-layers.js.map +1 -1
  346. package/lib/map/client/mixins/map/mixin.popup.js +7 -1
  347. package/lib/map/client/mixins/map/mixin.popup.js.map +1 -1
  348. package/lib/map/client/mixins/map/mixin.style.js +1 -1
  349. package/lib/map/client/mixins/map/mixin.style.js.map +1 -1
  350. package/lib/map/client/mixins/map/mixin.tooltip.js +7 -1
  351. package/lib/map/client/mixins/map/mixin.tooltip.js.map +1 -1
  352. package/lib/map/client/mixins/mixin.activity.js +2 -0
  353. package/lib/map/client/mixins/mixin.activity.js.map +1 -1
  354. package/lib/map/client/mixins/mixin.context.js +26 -3
  355. package/lib/map/client/mixins/mixin.context.js.map +1 -1
  356. package/lib/map/client/mixins/mixin.feature-service.js +3 -3
  357. package/lib/map/client/mixins/mixin.feature-service.js.map +1 -1
  358. package/lib/map/client/mixins/mixin.infobox.js +4 -0
  359. package/lib/map/client/mixins/mixin.infobox.js.map +1 -1
  360. package/lib/map/client/mixins/mixin.weacast.js +7 -5
  361. package/lib/map/client/mixins/mixin.weacast.js.map +1 -1
  362. package/lib/map/client/readers/index.js +54 -0
  363. package/lib/map/client/readers/index.js.map +1 -0
  364. package/lib/map/client/readers/reader.geojson.js +87 -0
  365. package/lib/map/client/readers/reader.geojson.js.map +1 -0
  366. package/lib/map/client/readers/reader.gpx.js +52 -0
  367. package/lib/map/client/readers/reader.gpx.js.map +1 -0
  368. package/lib/map/client/readers/reader.kml.js +52 -0
  369. package/lib/map/client/readers/reader.kml.js.map +1 -0
  370. package/lib/map/client/readers/reader.shp.js +116 -0
  371. package/lib/map/client/readers/reader.shp.js.map +1 -0
  372. package/lib/map/client/utils.js +0 -7
  373. package/lib/map/client/utils.js.map +1 -1
  374. package/lib/test/client/core/account.js +1 -1
  375. package/lib/test/client/core/account.js.map +1 -1
  376. package/lib/test/client/core/runner.js +1 -2
  377. package/lib/test/client/core/runner.js.map +1 -1
  378. package/lib/test/client/core/screens.js +1 -1
  379. package/lib/test/client/core/screens.js.map +1 -1
  380. package/lib/test/client/core/utils.js +2 -2
  381. package/lib/test/client/core/utils.js.map +1 -1
  382. package/lib/test/client/map/catalog.js +50 -49
  383. package/lib/test/client/map/catalog.js.map +1 -1
  384. package/package.json +3 -3
  385. package/.nyc_output/2c5b7c8e-81db-4d2c-a7a4-02dc640d301f.json +0 -1
  386. package/.nyc_output/a762cb58-70dc-4d39-ab69-928635affa98.json +0 -1
  387. package/.nyc_output/processinfo/2c5b7c8e-81db-4d2c-a7a4-02dc640d301f.json +0 -1
  388. package/.nyc_output/processinfo/2e74ca23-8cf0-4161-9536-f71c2a1a74bb.json +0 -1
  389. package/.nyc_output/processinfo/81d21e46-766a-46bc-b1b7-143ca577347a.json +0 -1
  390. package/.nyc_output/processinfo/a762cb58-70dc-4d39-ab69-928635affa98.json +0 -1
  391. package/.nyc_output/processinfo/aaf3ebbb-f895-4d7b-9255-bc5dee832570.json +0 -1
  392. package/.nyc_output/processinfo/dbeb2602-0ac2-4e66-978b-0d29548359ca.json +0 -1
  393. package/.nyc_output/processinfo/e47d1e4c-2fff-4dcb-908f-d3081162547c.json +0 -1
  394. package/extras/testcafe/Dockerfile +0 -48
  395. package/extras/testcafe/docker-entrypoint.sh +0 -27
  396. package/extras/testcafe/page-models/core/account.js +0 -75
  397. package/extras/testcafe/page-models/core/base-collection.js +0 -41
  398. package/extras/testcafe/page-models/core/base-page.js +0 -25
  399. package/extras/testcafe/page-models/core/groups.js +0 -36
  400. package/extras/testcafe/page-models/core/index.js +0 -140
  401. package/extras/testcafe/page-models/core/layout.js +0 -145
  402. package/extras/testcafe/page-models/core/members.js +0 -98
  403. package/extras/testcafe/page-models/core/organisations.js +0 -76
  404. package/extras/testcafe/page-models/core/screens.js +0 -99
  405. package/extras/testcafe/page-models/core/tags.js +0 -21
  406. package/extras/testcafe/page-models/map/add-layer.js +0 -51
  407. package/extras/testcafe/page-models/map/catalog.js +0 -132
  408. package/extras/testcafe/page-models/map/index.js +0 -36
  409. package/extras/testcafe/page-models/map/map-activity.js +0 -42
  410. package/extras/testcafe/page-models/map/timeline.js +0 -67
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">72.09% </span>
26
+ <span class="strong">1.25% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>217/301</span>
28
+ <span class='fraction'>4/320</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">56.59% </span>
33
+ <span class="strong">0% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>73/129</span>
35
+ <span class='fraction'>0/143</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">74.47% </span>
40
+ <span class="strong">0% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>35/47</span>
42
+ <span class='fraction'>0/47</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">73.29% </span>
47
+ <span class="strong">1.36% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>203/277</span>
49
+ <span class='fraction'>4/294</span>
50
50
  </div>
51
51
 
52
52
 
@@ -55,7 +55,7 @@
55
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
56
  </p>
57
57
  </div>
58
- <div class='status-line medium'></div>
58
+ <div class='status-line low'></div>
59
59
  <pre><table class="coverage">
60
60
  <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
61
61
  <a name='L2'></a><a href='#L2'>2</a>
@@ -548,31 +548,57 @@
548
548
  <a name='L489'></a><a href='#L489'>489</a>
549
549
  <a name='L490'></a><a href='#L490'>490</a>
550
550
  <a name='L491'></a><a href='#L491'>491</a>
551
- <a name='L492'></a><a href='#L492'>492</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
552
- <span class="cline-any cline-yes">1x</span>
553
- <span class="cline-any cline-yes">1x</span>
554
- <span class="cline-any cline-yes">1x</span>
555
- <span class="cline-any cline-yes">1x</span>
556
- <span class="cline-any cline-yes">1x</span>
557
- <span class="cline-any cline-yes">1x</span>
558
- <span class="cline-any cline-yes">1x</span>
559
- <span class="cline-any cline-yes">1x</span>
560
- <span class="cline-any cline-yes">1x</span>
561
- <span class="cline-any cline-yes">1x</span>
562
- <span class="cline-any cline-yes">1x</span>
563
- <span class="cline-any cline-yes">1x</span>
564
- <span class="cline-any cline-yes">1x</span>
565
- <span class="cline-any cline-yes">1x</span>
566
- <span class="cline-any cline-yes">1x</span>
567
- <span class="cline-any cline-yes">1x</span>
568
- <span class="cline-any cline-yes">1x</span>
569
- <span class="cline-any cline-yes">1x</span>
551
+ <a name='L492'></a><a href='#L492'>492</a>
552
+ <a name='L493'></a><a href='#L493'>493</a>
553
+ <a name='L494'></a><a href='#L494'>494</a>
554
+ <a name='L495'></a><a href='#L495'>495</a>
555
+ <a name='L496'></a><a href='#L496'>496</a>
556
+ <a name='L497'></a><a href='#L497'>497</a>
557
+ <a name='L498'></a><a href='#L498'>498</a>
558
+ <a name='L499'></a><a href='#L499'>499</a>
559
+ <a name='L500'></a><a href='#L500'>500</a>
560
+ <a name='L501'></a><a href='#L501'>501</a>
561
+ <a name='L502'></a><a href='#L502'>502</a>
562
+ <a name='L503'></a><a href='#L503'>503</a>
563
+ <a name='L504'></a><a href='#L504'>504</a>
564
+ <a name='L505'></a><a href='#L505'>505</a>
565
+ <a name='L506'></a><a href='#L506'>506</a>
566
+ <a name='L507'></a><a href='#L507'>507</a>
567
+ <a name='L508'></a><a href='#L508'>508</a>
568
+ <a name='L509'></a><a href='#L509'>509</a>
569
+ <a name='L510'></a><a href='#L510'>510</a>
570
+ <a name='L511'></a><a href='#L511'>511</a>
571
+ <a name='L512'></a><a href='#L512'>512</a>
572
+ <a name='L513'></a><a href='#L513'>513</a>
573
+ <a name='L514'></a><a href='#L514'>514</a>
574
+ <a name='L515'></a><a href='#L515'>515</a>
575
+ <a name='L516'></a><a href='#L516'>516</a>
576
+ <a name='L517'></a><a href='#L517'>517</a>
577
+ <a name='L518'></a><a href='#L518'>518</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
570
578
  <span class="cline-any cline-yes">1x</span>
571
579
  <span class="cline-any cline-yes">1x</span>
572
580
  <span class="cline-any cline-yes">1x</span>
581
+ <span class="cline-any cline-no">&nbsp;</span>
582
+ <span class="cline-any cline-no">&nbsp;</span>
583
+ <span class="cline-any cline-no">&nbsp;</span>
584
+ <span class="cline-any cline-no">&nbsp;</span>
585
+ <span class="cline-any cline-no">&nbsp;</span>
586
+ <span class="cline-any cline-no">&nbsp;</span>
587
+ <span class="cline-any cline-no">&nbsp;</span>
588
+ <span class="cline-any cline-no">&nbsp;</span>
589
+ <span class="cline-any cline-no">&nbsp;</span>
590
+ <span class="cline-any cline-no">&nbsp;</span>
591
+ <span class="cline-any cline-no">&nbsp;</span>
592
+ <span class="cline-any cline-no">&nbsp;</span>
593
+ <span class="cline-any cline-no">&nbsp;</span>
594
+ <span class="cline-any cline-no">&nbsp;</span>
595
+ <span class="cline-any cline-no">&nbsp;</span>
596
+ <span class="cline-any cline-no">&nbsp;</span>
597
+ <span class="cline-any cline-no">&nbsp;</span>
598
+ <span class="cline-any cline-no">&nbsp;</span>
573
599
  <span class="cline-any cline-neutral">&nbsp;</span>
574
- <span class="cline-any cline-yes">1x</span>
575
- <span class="cline-any cline-yes">1x</span>
600
+ <span class="cline-any cline-no">&nbsp;</span>
601
+ <span class="cline-any cline-no">&nbsp;</span>
576
602
  <span class="cline-any cline-neutral">&nbsp;</span>
577
603
  <span class="cline-any cline-neutral">&nbsp;</span>
578
604
  <span class="cline-any cline-no">&nbsp;</span>
@@ -583,113 +609,113 @@
583
609
  <span class="cline-any cline-neutral">&nbsp;</span>
584
610
  <span class="cline-any cline-neutral">&nbsp;</span>
585
611
  <span class="cline-any cline-neutral">&nbsp;</span>
586
- <span class="cline-any cline-yes">58x</span>
587
- <span class="cline-any cline-yes">58x</span>
612
+ <span class="cline-any cline-no">&nbsp;</span>
613
+ <span class="cline-any cline-no">&nbsp;</span>
588
614
  <span class="cline-any cline-neutral">&nbsp;</span>
589
- <span class="cline-any cline-yes">58x</span>
590
- <span class="cline-any cline-yes">5x</span>
615
+ <span class="cline-any cline-no">&nbsp;</span>
616
+ <span class="cline-any cline-no">&nbsp;</span>
591
617
  <span class="cline-any cline-neutral">&nbsp;</span>
592
618
  <span class="cline-any cline-neutral">&nbsp;</span>
593
- <span class="cline-any cline-yes">53x</span>
594
- <span class="cline-any cline-yes">53x</span>
595
- <span class="cline-any cline-yes">53x</span>
596
- <span class="cline-any cline-yes">53x</span>
597
- <span class="cline-any cline-yes">53x</span>
598
- <span class="cline-any cline-yes">53x</span>
619
+ <span class="cline-any cline-no">&nbsp;</span>
620
+ <span class="cline-any cline-no">&nbsp;</span>
621
+ <span class="cline-any cline-no">&nbsp;</span>
622
+ <span class="cline-any cline-no">&nbsp;</span>
623
+ <span class="cline-any cline-no">&nbsp;</span>
624
+ <span class="cline-any cline-no">&nbsp;</span>
599
625
  <span class="cline-any cline-neutral">&nbsp;</span>
600
- <span class="cline-any cline-yes">53x</span>
626
+ <span class="cline-any cline-no">&nbsp;</span>
601
627
  <span class="cline-any cline-neutral">&nbsp;</span>
602
628
  <span class="cline-any cline-neutral">&nbsp;</span>
603
629
  <span class="cline-any cline-neutral">&nbsp;</span>
604
- <span class="cline-any cline-yes">58x</span>
605
- <span class="cline-any cline-yes">58x</span>
606
- <span class="cline-any cline-yes">55x</span>
607
- <span class="cline-any cline-yes">55x</span>
630
+ <span class="cline-any cline-no">&nbsp;</span>
631
+ <span class="cline-any cline-no">&nbsp;</span>
632
+ <span class="cline-any cline-no">&nbsp;</span>
633
+ <span class="cline-any cline-no">&nbsp;</span>
608
634
  <span class="cline-any cline-neutral">&nbsp;</span>
609
- <span class="cline-any cline-yes">3x</span>
610
- <span class="cline-any cline-yes">3x</span>
635
+ <span class="cline-any cline-no">&nbsp;</span>
636
+ <span class="cline-any cline-no">&nbsp;</span>
611
637
  <span class="cline-any cline-neutral">&nbsp;</span>
612
638
  <span class="cline-any cline-no">&nbsp;</span>
613
639
  <span class="cline-any cline-neutral">&nbsp;</span>
614
640
  <span class="cline-any cline-neutral">&nbsp;</span>
615
641
  <span class="cline-any cline-neutral">&nbsp;</span>
616
642
  <span class="cline-any cline-neutral">&nbsp;</span>
617
- <span class="cline-any cline-yes">58x</span>
618
- <span class="cline-any cline-yes">58x</span>
619
- <span class="cline-any cline-yes">5x</span>
620
- <span class="cline-any cline-yes">5x</span>
643
+ <span class="cline-any cline-no">&nbsp;</span>
644
+ <span class="cline-any cline-no">&nbsp;</span>
645
+ <span class="cline-any cline-no">&nbsp;</span>
646
+ <span class="cline-any cline-no">&nbsp;</span>
621
647
  <span class="cline-any cline-no">&nbsp;</span>
622
648
  <span class="cline-any cline-neutral">&nbsp;</span>
623
- <span class="cline-any cline-yes">5x</span>
649
+ <span class="cline-any cline-no">&nbsp;</span>
624
650
  <span class="cline-any cline-neutral">&nbsp;</span>
625
- <span class="cline-any cline-yes">53x</span>
626
- <span class="cline-any cline-yes">53x</span>
651
+ <span class="cline-any cline-no">&nbsp;</span>
652
+ <span class="cline-any cline-no">&nbsp;</span>
627
653
  <span class="cline-any cline-neutral">&nbsp;</span>
628
654
  <span class="cline-any cline-no">&nbsp;</span>
629
655
  <span class="cline-any cline-neutral">&nbsp;</span>
630
656
  <span class="cline-any cline-neutral">&nbsp;</span>
631
657
  <span class="cline-any cline-neutral">&nbsp;</span>
632
658
  <span class="cline-any cline-neutral">&nbsp;</span>
633
- <span class="cline-any cline-yes">58x</span>
659
+ <span class="cline-any cline-no">&nbsp;</span>
634
660
  <span class="cline-any cline-neutral">&nbsp;</span>
635
661
  <span class="cline-any cline-neutral">&nbsp;</span>
636
662
  <span class="cline-any cline-neutral">&nbsp;</span>
637
- <span class="cline-any cline-yes">11x</span>
663
+ <span class="cline-any cline-no">&nbsp;</span>
638
664
  <span class="cline-any cline-neutral">&nbsp;</span>
639
- <span class="cline-any cline-yes">28x</span>
665
+ <span class="cline-any cline-no">&nbsp;</span>
640
666
  <span class="cline-any cline-neutral">&nbsp;</span>
641
- <span class="cline-any cline-yes">16x</span>
667
+ <span class="cline-any cline-no">&nbsp;</span>
642
668
  <span class="cline-any cline-no">&nbsp;</span>
643
669
  <span class="cline-any cline-neutral">&nbsp;</span>
644
- <span class="cline-any cline-yes">16x</span>
670
+ <span class="cline-any cline-no">&nbsp;</span>
645
671
  <span class="cline-any cline-neutral">&nbsp;</span>
646
- <span class="cline-any cline-yes">16x</span>
647
- <span class="cline-any cline-yes">12x</span>
672
+ <span class="cline-any cline-no">&nbsp;</span>
673
+ <span class="cline-any cline-no">&nbsp;</span>
648
674
  <span class="cline-any cline-neutral">&nbsp;</span>
649
675
  <span class="cline-any cline-neutral">&nbsp;</span>
650
- <span class="cline-any cline-yes">15x</span>
651
- <span class="cline-any cline-yes">7x</span>
676
+ <span class="cline-any cline-no">&nbsp;</span>
677
+ <span class="cline-any cline-no">&nbsp;</span>
652
678
  <span class="cline-any cline-neutral">&nbsp;</span>
653
679
  <span class="cline-any cline-neutral">&nbsp;</span>
654
- <span class="cline-any cline-yes">11x</span>
655
- <span class="cline-any cline-yes">7x</span>
680
+ <span class="cline-any cline-no">&nbsp;</span>
681
+ <span class="cline-any cline-no">&nbsp;</span>
656
682
  <span class="cline-any cline-neutral">&nbsp;</span>
657
683
  <span class="cline-any cline-neutral">&nbsp;</span>
658
- <span class="cline-any cline-yes">27x</span>
659
- <span class="cline-any cline-yes">16x</span>
684
+ <span class="cline-any cline-no">&nbsp;</span>
685
+ <span class="cline-any cline-no">&nbsp;</span>
660
686
  <span class="cline-any cline-neutral">&nbsp;</span>
661
- <span class="cline-any cline-yes">11x</span>
662
- <span class="cline-any cline-yes">9x</span>
663
- <span class="cline-any cline-yes">4x</span>
664
- <span class="cline-any cline-yes">4x</span>
665
687
  <span class="cline-any cline-no">&nbsp;</span>
666
- <span class="cline-any cline-yes">7x</span>
667
- <span class="cline-any cline-yes">4x</span>
688
+ <span class="cline-any cline-no">&nbsp;</span>
689
+ <span class="cline-any cline-no">&nbsp;</span>
690
+ <span class="cline-any cline-no">&nbsp;</span>
691
+ <span class="cline-any cline-no">&nbsp;</span>
692
+ <span class="cline-any cline-no">&nbsp;</span>
693
+ <span class="cline-any cline-no">&nbsp;</span>
668
694
  <span class="cline-any cline-neutral">&nbsp;</span>
669
695
  <span class="cline-any cline-neutral">&nbsp;</span>
670
696
  <span class="cline-any cline-neutral">&nbsp;</span>
671
697
  <span class="cline-any cline-neutral">&nbsp;</span>
672
- <span class="cline-any cline-yes">58x</span>
698
+ <span class="cline-any cline-no">&nbsp;</span>
673
699
  <span class="cline-any cline-neutral">&nbsp;</span>
674
- <span class="cline-any cline-yes">58x</span>
675
- <span class="cline-any cline-yes">58x</span>
700
+ <span class="cline-any cline-no">&nbsp;</span>
701
+ <span class="cline-any cline-no">&nbsp;</span>
676
702
  <span class="cline-any cline-neutral">&nbsp;</span>
677
703
  <span class="cline-any cline-neutral">&nbsp;</span>
678
704
  <span class="cline-any cline-neutral">&nbsp;</span>
679
- <span class="cline-any cline-yes">58x</span>
705
+ <span class="cline-any cline-no">&nbsp;</span>
680
706
  <span class="cline-any cline-neutral">&nbsp;</span>
681
- <span class="cline-any cline-yes">58x</span>
707
+ <span class="cline-any cline-no">&nbsp;</span>
682
708
  <span class="cline-any cline-neutral">&nbsp;</span>
683
- <span class="cline-any cline-yes">58x</span>
684
- <span class="cline-any cline-yes">58x</span>
685
- <span class="cline-any cline-yes">58x</span>
686
- <span class="cline-any cline-yes">25x</span>
687
- <span class="cline-any cline-yes">17x</span>
688
- <span class="cline-any cline-yes">17x</span>
709
+ <span class="cline-any cline-no">&nbsp;</span>
710
+ <span class="cline-any cline-no">&nbsp;</span>
711
+ <span class="cline-any cline-no">&nbsp;</span>
712
+ <span class="cline-any cline-no">&nbsp;</span>
713
+ <span class="cline-any cline-no">&nbsp;</span>
714
+ <span class="cline-any cline-no">&nbsp;</span>
689
715
  <span class="cline-any cline-neutral">&nbsp;</span>
690
716
  <span class="cline-any cline-neutral">&nbsp;</span>
691
- <span class="cline-any cline-yes">8x</span>
692
- <span class="cline-any cline-yes">8x</span>
717
+ <span class="cline-any cline-no">&nbsp;</span>
718
+ <span class="cline-any cline-no">&nbsp;</span>
693
719
  <span class="cline-any cline-neutral">&nbsp;</span>
694
720
  <span class="cline-any cline-no">&nbsp;</span>
695
721
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -698,44 +724,44 @@
698
724
  <span class="cline-any cline-neutral">&nbsp;</span>
699
725
  <span class="cline-any cline-neutral">&nbsp;</span>
700
726
  <span class="cline-any cline-neutral">&nbsp;</span>
701
- <span class="cline-any cline-yes">58x</span>
702
- <span class="cline-any cline-yes">17x</span>
703
- <span class="cline-any cline-yes">17x</span>
704
- <span class="cline-any cline-yes">41x</span>
705
- <span class="cline-any cline-yes">11x</span>
727
+ <span class="cline-any cline-no">&nbsp;</span>
728
+ <span class="cline-any cline-no">&nbsp;</span>
729
+ <span class="cline-any cline-no">&nbsp;</span>
730
+ <span class="cline-any cline-no">&nbsp;</span>
731
+ <span class="cline-any cline-no">&nbsp;</span>
706
732
  <span class="cline-any cline-neutral">&nbsp;</span>
707
733
  <span class="cline-any cline-neutral">&nbsp;</span>
708
- <span class="cline-any cline-yes">30x</span>
734
+ <span class="cline-any cline-no">&nbsp;</span>
709
735
  <span class="cline-any cline-neutral">&nbsp;</span>
710
- <span class="cline-any cline-yes">30x</span>
711
- <span class="cline-any cline-yes">25x</span>
736
+ <span class="cline-any cline-no">&nbsp;</span>
737
+ <span class="cline-any cline-no">&nbsp;</span>
712
738
  <span class="cline-any cline-neutral">&nbsp;</span>
713
739
  <span class="cline-any cline-neutral">&nbsp;</span>
714
- <span class="cline-any cline-yes">30x</span>
740
+ <span class="cline-any cline-no">&nbsp;</span>
715
741
  <span class="cline-any cline-neutral">&nbsp;</span>
716
742
  <span class="cline-any cline-neutral">&nbsp;</span>
717
743
  <span class="cline-any cline-neutral">&nbsp;</span>
718
- <span class="cline-any cline-yes">58x</span>
744
+ <span class="cline-any cline-no">&nbsp;</span>
719
745
  <span class="cline-any cline-neutral">&nbsp;</span>
720
- <span class="cline-any cline-yes">58x</span>
721
- <span class="cline-any cline-yes">12x</span>
722
- <span class="cline-any cline-yes">12x</span>
746
+ <span class="cline-any cline-no">&nbsp;</span>
747
+ <span class="cline-any cline-no">&nbsp;</span>
748
+ <span class="cline-any cline-no">&nbsp;</span>
723
749
  <span class="cline-any cline-neutral">&nbsp;</span>
724
- <span class="cline-any cline-yes">58x</span>
750
+ <span class="cline-any cline-no">&nbsp;</span>
725
751
  <span class="cline-any cline-neutral">&nbsp;</span>
726
- <span class="cline-any cline-yes">58x</span>
752
+ <span class="cline-any cline-no">&nbsp;</span>
727
753
  <span class="cline-any cline-neutral">&nbsp;</span>
728
- <span class="cline-any cline-yes">58x</span>
729
- <span class="cline-any cline-yes">17x</span>
730
- <span class="cline-any cline-yes">17x</span>
754
+ <span class="cline-any cline-no">&nbsp;</span>
755
+ <span class="cline-any cline-no">&nbsp;</span>
756
+ <span class="cline-any cline-no">&nbsp;</span>
731
757
  <span class="cline-any cline-neutral">&nbsp;</span>
732
- <span class="cline-any cline-yes">5x</span>
733
- <span class="cline-any cline-yes">5x</span>
758
+ <span class="cline-any cline-no">&nbsp;</span>
759
+ <span class="cline-any cline-no">&nbsp;</span>
734
760
  <span class="cline-any cline-neutral">&nbsp;</span>
735
- <span class="cline-any cline-yes">5x</span>
761
+ <span class="cline-any cline-no">&nbsp;</span>
736
762
  <span class="cline-any cline-neutral">&nbsp;</span>
737
- <span class="cline-any cline-yes">12x</span>
738
- <span class="cline-any cline-yes">12x</span>
763
+ <span class="cline-any cline-no">&nbsp;</span>
764
+ <span class="cline-any cline-no">&nbsp;</span>
739
765
  <span class="cline-any cline-neutral">&nbsp;</span>
740
766
  <span class="cline-any cline-no">&nbsp;</span>
741
767
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -743,129 +769,155 @@
743
769
  <span class="cline-any cline-neutral">&nbsp;</span>
744
770
  <span class="cline-any cline-neutral">&nbsp;</span>
745
771
  <span class="cline-any cline-neutral">&nbsp;</span>
746
- <span class="cline-any cline-yes">58x</span>
747
- <span class="cline-any cline-yes">58x</span>
748
- <span class="cline-any cline-yes">58x</span>
749
- <span class="cline-any cline-yes">58x</span>
750
- <span class="cline-any cline-yes">58x</span>
772
+ <span class="cline-any cline-no">&nbsp;</span>
773
+ <span class="cline-any cline-no">&nbsp;</span>
774
+ <span class="cline-any cline-no">&nbsp;</span>
775
+ <span class="cline-any cline-no">&nbsp;</span>
776
+ <span class="cline-any cline-no">&nbsp;</span>
751
777
  <span class="cline-any cline-neutral">&nbsp;</span>
752
778
  <span class="cline-any cline-neutral">&nbsp;</span>
753
- <span class="cline-any cline-yes">58x</span>
754
- <span class="cline-any cline-yes">77x</span>
755
- <span class="cline-any cline-yes">77x</span>
756
- <span class="cline-any cline-yes">7x</span>
779
+ <span class="cline-any cline-no">&nbsp;</span>
780
+ <span class="cline-any cline-no">&nbsp;</span>
781
+ <span class="cline-any cline-no">&nbsp;</span>
782
+ <span class="cline-any cline-no">&nbsp;</span>
757
783
  <span class="cline-any cline-neutral">&nbsp;</span>
758
- <span class="cline-any cline-yes">77x</span>
784
+ <span class="cline-any cline-no">&nbsp;</span>
759
785
  <span class="cline-any cline-neutral">&nbsp;</span>
760
- <span class="cline-any cline-yes">58x</span>
761
- <span class="cline-any cline-yes">3x</span>
786
+ <span class="cline-any cline-no">&nbsp;</span>
787
+ <span class="cline-any cline-no">&nbsp;</span>
762
788
  <span class="cline-any cline-neutral">&nbsp;</span>
763
789
  <span class="cline-any cline-neutral">&nbsp;</span>
764
- <span class="cline-any cline-yes">58x</span>
765
- <span class="cline-any cline-yes">58x</span>
790
+ <span class="cline-any cline-no">&nbsp;</span>
791
+ <span class="cline-any cline-no">&nbsp;</span>
766
792
  <span class="cline-any cline-neutral">&nbsp;</span>
767
- <span class="cline-any cline-yes">58x</span>
793
+ <span class="cline-any cline-no">&nbsp;</span>
768
794
  <span class="cline-any cline-neutral">&nbsp;</span>
769
795
  <span class="cline-any cline-neutral">&nbsp;</span>
770
796
  <span class="cline-any cline-neutral">&nbsp;</span>
771
- <span class="cline-any cline-yes">1x</span>
772
- <span class="cline-any cline-yes">1x</span>
797
+ <span class="cline-any cline-no">&nbsp;</span>
798
+ <span class="cline-any cline-no">&nbsp;</span>
773
799
  <span class="cline-any cline-no">&nbsp;</span>
774
800
  <span class="cline-any cline-neutral">&nbsp;</span>
775
- <span class="cline-any cline-yes">1x</span>
801
+ <span class="cline-any cline-no">&nbsp;</span>
776
802
  <span class="cline-any cline-neutral">&nbsp;</span>
777
- <span class="cline-any cline-yes">3x</span>
778
- <span class="cline-any cline-yes">3x</span>
779
- <span class="cline-any cline-yes">3x</span>
803
+ <span class="cline-any cline-no">&nbsp;</span>
804
+ <span class="cline-any cline-no">&nbsp;</span>
805
+ <span class="cline-any cline-no">&nbsp;</span>
780
806
  <span class="cline-any cline-neutral">&nbsp;</span>
781
807
  <span class="cline-any cline-neutral">&nbsp;</span>
782
- <span class="cline-any cline-yes">7x</span>
783
- <span class="cline-any cline-yes">4x</span>
784
- <span class="cline-any cline-yes">4x</span>
785
- <span class="cline-any cline-yes">4x</span>
786
- <span class="cline-any cline-yes">4x</span>
787
- <span class="cline-any cline-yes">4x</span>
808
+ <span class="cline-any cline-no">&nbsp;</span>
809
+ <span class="cline-any cline-no">&nbsp;</span>
810
+ <span class="cline-any cline-no">&nbsp;</span>
811
+ <span class="cline-any cline-no">&nbsp;</span>
812
+ <span class="cline-any cline-no">&nbsp;</span>
813
+ <span class="cline-any cline-no">&nbsp;</span>
814
+ <span class="cline-any cline-no">&nbsp;</span>
815
+ <span class="cline-any cline-no">&nbsp;</span>
788
816
  <span class="cline-any cline-neutral">&nbsp;</span>
789
- <span class="cline-any cline-yes">4x</span>
790
- <span class="cline-any cline-yes">4x</span>
791
- <span class="cline-any cline-yes">4x</span>
792
- <span class="cline-any cline-yes">3x</span>
793
- <span class="cline-any cline-yes">3x</span>
794
- <span class="cline-any cline-yes">3x</span>
795
817
  <span class="cline-any cline-neutral">&nbsp;</span>
818
+ <span class="cline-any cline-no">&nbsp;</span>
819
+ <span class="cline-any cline-no">&nbsp;</span>
796
820
  <span class="cline-any cline-neutral">&nbsp;</span>
797
- <span class="cline-any cline-yes">1x</span>
821
+ <span class="cline-any cline-no">&nbsp;</span>
798
822
  <span class="cline-any cline-neutral">&nbsp;</span>
823
+ <span class="cline-any cline-no">&nbsp;</span>
799
824
  <span class="cline-any cline-neutral">&nbsp;</span>
800
- <span class="cline-any cline-yes">3x</span>
801
- <span class="cline-any cline-yes">1x</span>
802
- <span class="cline-any cline-yes">1x</span>
803
- <span class="cline-any cline-yes">1x</span>
825
+ <span class="cline-any cline-no">&nbsp;</span>
826
+ <span class="cline-any cline-no">&nbsp;</span>
804
827
  <span class="cline-any cline-neutral">&nbsp;</span>
805
- <span class="cline-any cline-yes">1x</span>
828
+ <span class="cline-any cline-no">&nbsp;</span>
806
829
  <span class="cline-any cline-neutral">&nbsp;</span>
807
- <span class="cline-any cline-yes">1x</span>
830
+ <span class="cline-any cline-no">&nbsp;</span>
831
+ <span class="cline-any cline-no">&nbsp;</span>
832
+ <span class="cline-any cline-no">&nbsp;</span>
808
833
  <span class="cline-any cline-neutral">&nbsp;</span>
809
- <span class="cline-any cline-yes">1x</span>
810
- <span class="cline-any cline-yes">1x</span>
811
- <span class="cline-any cline-yes">1x</span>
834
+ <span class="cline-any cline-no">&nbsp;</span>
812
835
  <span class="cline-any cline-neutral">&nbsp;</span>
813
- <span class="cline-any cline-yes">1x</span>
814
836
  <span class="cline-any cline-neutral">&nbsp;</span>
815
837
  <span class="cline-any cline-no">&nbsp;</span>
838
+ <span class="cline-any cline-no">&nbsp;</span>
816
839
  <span class="cline-any cline-neutral">&nbsp;</span>
840
+ <span class="cline-any cline-no">&nbsp;</span>
841
+ <span class="cline-any cline-no">&nbsp;</span>
842
+ <span class="cline-any cline-no">&nbsp;</span>
843
+ <span class="cline-any cline-no">&nbsp;</span>
844
+ <span class="cline-any cline-no">&nbsp;</span>
817
845
  <span class="cline-any cline-neutral">&nbsp;</span>
846
+ <span class="cline-any cline-no">&nbsp;</span>
847
+ <span class="cline-any cline-no">&nbsp;</span>
848
+ <span class="cline-any cline-no">&nbsp;</span>
849
+ <span class="cline-any cline-no">&nbsp;</span>
818
850
  <span class="cline-any cline-neutral">&nbsp;</span>
819
- <span class="cline-any cline-yes">3x</span>
820
851
  <span class="cline-any cline-neutral">&nbsp;</span>
852
+ <span class="cline-any cline-no">&nbsp;</span>
853
+ <span class="cline-any cline-no">&nbsp;</span>
854
+ <span class="cline-any cline-no">&nbsp;</span>
855
+ <span class="cline-any cline-no">&nbsp;</span>
821
856
  <span class="cline-any cline-neutral">&nbsp;</span>
822
857
  <span class="cline-any cline-neutral">&nbsp;</span>
823
- <span class="cline-any cline-yes">1x</span>
858
+ <span class="cline-any cline-no">&nbsp;</span>
859
+ <span class="cline-any cline-no">&nbsp;</span>
860
+ <span class="cline-any cline-no">&nbsp;</span>
861
+ <span class="cline-any cline-neutral">&nbsp;</span>
862
+ <span class="cline-any cline-no">&nbsp;</span>
863
+ <span class="cline-any cline-no">&nbsp;</span>
824
864
  <span class="cline-any cline-neutral">&nbsp;</span>
865
+ <span class="cline-any cline-no">&nbsp;</span>
866
+ <span class="cline-any cline-neutral">&nbsp;</span>
867
+ <span class="cline-any cline-no">&nbsp;</span>
825
868
  <span class="cline-any cline-neutral">&nbsp;</span>
826
869
  <span class="cline-any cline-neutral">&nbsp;</span>
827
- <span class="cline-any cline-yes">5x</span>
828
- <span class="cline-any cline-yes">5x</span>
829
870
  <span class="cline-any cline-neutral">&nbsp;</span>
830
- <span class="cline-any cline-yes">5x</span>
871
+ <span class="cline-any cline-no">&nbsp;</span>
831
872
  <span class="cline-any cline-neutral">&nbsp;</span>
832
- <span class="cline-any cline-yes">5x</span>
833
- <span class="cline-any cline-yes">5x</span>
834
873
  <span class="cline-any cline-neutral">&nbsp;</span>
835
874
  <span class="cline-any cline-neutral">&nbsp;</span>
836
875
  <span class="cline-any cline-no">&nbsp;</span>
837
876
  <span class="cline-any cline-neutral">&nbsp;</span>
838
877
  <span class="cline-any cline-neutral">&nbsp;</span>
839
- <span class="cline-any cline-yes">5x</span>
840
878
  <span class="cline-any cline-neutral">&nbsp;</span>
841
- <span class="cline-any cline-yes">5x</span>
842
- <span class="cline-any cline-yes">10x</span>
879
+ <span class="cline-any cline-no">&nbsp;</span>
880
+ <span class="cline-any cline-no">&nbsp;</span>
843
881
  <span class="cline-any cline-neutral">&nbsp;</span>
844
- <span class="cline-any cline-yes">10x</span>
845
- <span class="cline-any cline-yes">5x</span>
882
+ <span class="cline-any cline-no">&nbsp;</span>
846
883
  <span class="cline-any cline-neutral">&nbsp;</span>
847
- <span class="cline-any cline-yes">10x</span>
848
- <span class="cline-any cline-yes">10x</span>
884
+ <span class="cline-any cline-no">&nbsp;</span>
885
+ <span class="cline-any cline-no">&nbsp;</span>
849
886
  <span class="cline-any cline-neutral">&nbsp;</span>
850
887
  <span class="cline-any cline-neutral">&nbsp;</span>
851
888
  <span class="cline-any cline-no">&nbsp;</span>
852
889
  <span class="cline-any cline-neutral">&nbsp;</span>
853
890
  <span class="cline-any cline-neutral">&nbsp;</span>
891
+ <span class="cline-any cline-no">&nbsp;</span>
854
892
  <span class="cline-any cline-neutral">&nbsp;</span>
893
+ <span class="cline-any cline-no">&nbsp;</span>
894
+ <span class="cline-any cline-no">&nbsp;</span>
855
895
  <span class="cline-any cline-neutral">&nbsp;</span>
896
+ <span class="cline-any cline-no">&nbsp;</span>
897
+ <span class="cline-any cline-no">&nbsp;</span>
856
898
  <span class="cline-any cline-neutral">&nbsp;</span>
857
- <span class="cline-any cline-yes">5x</span>
858
- <span class="cline-any cline-yes">5x</span>
859
- <span class="cline-any cline-yes">5x</span>
899
+ <span class="cline-any cline-no">&nbsp;</span>
900
+ <span class="cline-any cline-no">&nbsp;</span>
860
901
  <span class="cline-any cline-neutral">&nbsp;</span>
861
- <span class="cline-any cline-yes">5x</span>
862
902
  <span class="cline-any cline-neutral">&nbsp;</span>
903
+ <span class="cline-any cline-no">&nbsp;</span>
863
904
  <span class="cline-any cline-neutral">&nbsp;</span>
864
- <span class="cline-any cline-yes">5x</span>
865
- <span class="cline-any cline-yes">5x</span>
866
- <span class="cline-any cline-yes">5x</span>
867
905
  <span class="cline-any cline-neutral">&nbsp;</span>
868
- <span class="cline-any cline-yes">5x</span>
906
+ <span class="cline-any cline-neutral">&nbsp;</span>
907
+ <span class="cline-any cline-neutral">&nbsp;</span>
908
+ <span class="cline-any cline-neutral">&nbsp;</span>
909
+ <span class="cline-any cline-no">&nbsp;</span>
910
+ <span class="cline-any cline-no">&nbsp;</span>
911
+ <span class="cline-any cline-no">&nbsp;</span>
912
+ <span class="cline-any cline-neutral">&nbsp;</span>
913
+ <span class="cline-any cline-no">&nbsp;</span>
914
+ <span class="cline-any cline-neutral">&nbsp;</span>
915
+ <span class="cline-any cline-neutral">&nbsp;</span>
916
+ <span class="cline-any cline-no">&nbsp;</span>
917
+ <span class="cline-any cline-no">&nbsp;</span>
918
+ <span class="cline-any cline-no">&nbsp;</span>
919
+ <span class="cline-any cline-neutral">&nbsp;</span>
920
+ <span class="cline-any cline-no">&nbsp;</span>
869
921
  <span class="cline-any cline-no">&nbsp;</span>
870
922
  <span class="cline-any cline-no">&nbsp;</span>
871
923
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -947,54 +999,54 @@
947
999
  <span class="cline-any cline-neutral">&nbsp;</span>
948
1000
  <span class="cline-any cline-neutral">&nbsp;</span>
949
1001
  <span class="cline-any cline-neutral">&nbsp;</span>
950
- <span class="cline-any cline-yes">5x</span>
1002
+ <span class="cline-any cline-no">&nbsp;</span>
951
1003
  <span class="cline-any cline-neutral">&nbsp;</span>
952
1004
  <span class="cline-any cline-neutral">&nbsp;</span>
953
- <span class="cline-any cline-yes">5x</span>
1005
+ <span class="cline-any cline-no">&nbsp;</span>
954
1006
  <span class="cline-any cline-neutral">&nbsp;</span>
955
- <span class="cline-any cline-yes">5x</span>
1007
+ <span class="cline-any cline-no">&nbsp;</span>
956
1008
  <span class="cline-any cline-neutral">&nbsp;</span>
957
- <span class="cline-any cline-yes">5x</span>
1009
+ <span class="cline-any cline-no">&nbsp;</span>
958
1010
  <span class="cline-any cline-neutral">&nbsp;</span>
959
1011
  <span class="cline-any cline-neutral">&nbsp;</span>
960
- <span class="cline-any cline-yes">5x</span>
1012
+ <span class="cline-any cline-no">&nbsp;</span>
961
1013
  <span class="cline-any cline-no">&nbsp;</span>
962
1014
  <span class="cline-any cline-no">&nbsp;</span>
963
1015
  <span class="cline-any cline-no">&nbsp;</span>
964
1016
  <span class="cline-any cline-neutral">&nbsp;</span>
965
1017
  <span class="cline-any cline-neutral">&nbsp;</span>
966
- <span class="cline-any cline-yes">5x</span>
1018
+ <span class="cline-any cline-no">&nbsp;</span>
967
1019
  <span class="cline-any cline-neutral">&nbsp;</span>
968
- <span class="cline-any cline-yes">266x</span>
969
- <span class="cline-any cline-yes">1x</span>
970
- <span class="cline-any cline-yes">265x</span>
1020
+ <span class="cline-any cline-no">&nbsp;</span>
1021
+ <span class="cline-any cline-no">&nbsp;</span>
1022
+ <span class="cline-any cline-no">&nbsp;</span>
971
1023
  <span class="cline-any cline-neutral">&nbsp;</span>
972
- <span class="cline-any cline-yes">21x</span>
973
- <span class="cline-any cline-yes">18x</span>
1024
+ <span class="cline-any cline-no">&nbsp;</span>
1025
+ <span class="cline-any cline-no">&nbsp;</span>
974
1026
  <span class="cline-any cline-neutral">&nbsp;</span>
975
- <span class="cline-any cline-yes">244x</span>
1027
+ <span class="cline-any cline-no">&nbsp;</span>
976
1028
  <span class="cline-any cline-neutral">&nbsp;</span>
977
1029
  <span class="cline-any cline-neutral">&nbsp;</span>
978
1030
  <span class="cline-any cline-neutral">&nbsp;</span>
979
- <span class="cline-any cline-yes">5x</span>
1031
+ <span class="cline-any cline-no">&nbsp;</span>
980
1032
  <span class="cline-any cline-no">&nbsp;</span>
981
1033
  <span class="cline-any cline-neutral">&nbsp;</span>
982
1034
  <span class="cline-any cline-neutral">&nbsp;</span>
983
- <span class="cline-any cline-yes">5x</span>
984
- <span class="cline-any cline-yes">58x</span>
1035
+ <span class="cline-any cline-no">&nbsp;</span>
1036
+ <span class="cline-any cline-no">&nbsp;</span>
985
1037
  <span class="cline-any cline-neutral">&nbsp;</span>
986
1038
  <span class="cline-any cline-neutral">&nbsp;</span>
987
- <span class="cline-any cline-yes">5x</span>
988
- <span class="cline-any cline-yes">1x</span>
1039
+ <span class="cline-any cline-no">&nbsp;</span>
1040
+ <span class="cline-any cline-no">&nbsp;</span>
989
1041
  <span class="cline-any cline-neutral">&nbsp;</span>
990
1042
  <span class="cline-any cline-neutral">&nbsp;</span>
991
1043
  <span class="cline-any cline-neutral">&nbsp;</span>
992
- <span class="cline-any cline-yes">80x</span>
993
- <span class="cline-any cline-yes">65x</span>
994
- <span class="cline-any cline-yes">65x</span>
1044
+ <span class="cline-any cline-no">&nbsp;</span>
1045
+ <span class="cline-any cline-no">&nbsp;</span>
1046
+ <span class="cline-any cline-no">&nbsp;</span>
995
1047
  <span class="cline-any cline-neutral">&nbsp;</span>
996
- <span class="cline-any cline-yes">5x</span>
997
- <span class="cline-any cline-yes">5x</span>
1048
+ <span class="cline-any cline-no">&nbsp;</span>
1049
+ <span class="cline-any cline-no">&nbsp;</span>
998
1050
  <span class="cline-any cline-neutral">&nbsp;</span>
999
1051
  <span class="cline-any cline-no">&nbsp;</span>
1000
1052
  <span class="cline-any cline-no">&nbsp;</span>
@@ -1021,49 +1073,49 @@
1021
1073
  <span class="cline-any cline-neutral">&nbsp;</span>
1022
1074
  <span class="cline-any cline-neutral">&nbsp;</span>
1023
1075
  <span class="cline-any cline-neutral">&nbsp;</span>
1024
- <span class="cline-any cline-yes">5x</span>
1025
- <span class="cline-any cline-yes">5x</span>
1026
- <span class="cline-any cline-yes">5x</span>
1027
- <span class="cline-any cline-yes">5x</span>
1028
- <span class="cline-any cline-yes">5x</span>
1029
- <span class="cline-any cline-yes">5x</span>
1076
+ <span class="cline-any cline-no">&nbsp;</span>
1077
+ <span class="cline-any cline-no">&nbsp;</span>
1078
+ <span class="cline-any cline-no">&nbsp;</span>
1079
+ <span class="cline-any cline-no">&nbsp;</span>
1080
+ <span class="cline-any cline-no">&nbsp;</span>
1081
+ <span class="cline-any cline-no">&nbsp;</span>
1030
1082
  <span class="cline-any cline-neutral">&nbsp;</span>
1031
1083
  <span class="cline-any cline-neutral">&nbsp;</span>
1032
- <span class="cline-any cline-yes">5x</span>
1033
- <span class="cline-any cline-yes">5x</span>
1034
- <span class="cline-any cline-yes">5x</span>
1035
- <span class="cline-any cline-yes">5x</span>
1084
+ <span class="cline-any cline-no">&nbsp;</span>
1085
+ <span class="cline-any cline-no">&nbsp;</span>
1086
+ <span class="cline-any cline-no">&nbsp;</span>
1087
+ <span class="cline-any cline-no">&nbsp;</span>
1036
1088
  <span class="cline-any cline-neutral">&nbsp;</span>
1037
1089
  <span class="cline-any cline-neutral">&nbsp;</span>
1038
- <span class="cline-any cline-yes">5x</span>
1090
+ <span class="cline-any cline-no">&nbsp;</span>
1039
1091
  <span class="cline-any cline-neutral">&nbsp;</span>
1040
- <span class="cline-any cline-yes">5x</span>
1092
+ <span class="cline-any cline-no">&nbsp;</span>
1041
1093
  <span class="cline-any cline-neutral">&nbsp;</span>
1042
1094
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import path from 'path'
1043
1095
  import url from 'url'
1044
1096
  import makeDebug from 'debug'
1045
1097
  import logger from 'winston'
1046
- import _ from 'lodash'
1047
- import sift from 'sift'
1048
- import 'winston-daily-rotate-file'
1049
- import compress from 'compression'
1050
- import cors from 'cors'
1051
- import helmet from 'helmet'
1052
- import bodyParser from 'body-parser'
1053
- import { RateLimiter as SocketLimiter } from 'limiter'
1054
- import HttpLimiter from 'express-rate-limit'
1055
- import feathers from '@feathersjs/feathers'
1056
- import configuration from '@feathersjs/configuration'
1057
- import { TooManyRequests, Forbidden, BadRequest } from '@feathersjs/errors'
1058
- import express from '@feathersjs/express'
1059
- import rest from '@feathersjs/express/rest'
1060
- import socketio from '@feathersjs/socketio'
1061
- import { ObjectID } from 'mongodb'
1062
- import { Database, idToString } from './db'
1063
- import auth, { authSocket } from './authentication'
1098
+ <span class="cstat-no" title="statement not covered" >import _ from 'lodash'</span>
1099
+ <span class="cstat-no" title="statement not covered" >import sift from 'sift'</span>
1100
+ <span class="cstat-no" title="statement not covered" >import 'winston-daily-rotate-file'</span>
1101
+ <span class="cstat-no" title="statement not covered" >import compress from 'compression'</span>
1102
+ <span class="cstat-no" title="statement not covered" >import cors from 'cors'</span>
1103
+ <span class="cstat-no" title="statement not covered" >import helmet from 'helmet'</span>
1104
+ <span class="cstat-no" title="statement not covered" >import bodyParser from 'body-parser'</span>
1105
+ <span class="cstat-no" title="statement not covered" >import { RateLimiter as SocketLimiter } from 'limiter'</span>
1106
+ <span class="cstat-no" title="statement not covered" >import HttpLimiter from 'express-rate-limit'</span>
1107
+ <span class="cstat-no" title="statement not covered" >import feathers from '@feathersjs/feathers'</span>
1108
+ <span class="cstat-no" title="statement not covered" >import configuration from '@feathersjs/configuration'</span>
1109
+ <span class="cstat-no" title="statement not covered" >import { TooManyRequests, Forbidden, BadRequest } from '@feathersjs/errors'</span>
1110
+ <span class="cstat-no" title="statement not covered" >import express from '@feathersjs/express'</span>
1111
+ <span class="cstat-no" title="statement not covered" >import rest from '@feathersjs/express/rest'</span>
1112
+ <span class="cstat-no" title="statement not covered" >import socketio from '@feathersjs/socketio'</span>
1113
+ <span class="cstat-no" title="statement not covered" >import { ObjectID } from 'mongodb'</span>
1114
+ <span class="cstat-no" title="statement not covered" >import { Database, idToString } from './db'</span>
1115
+ <span class="cstat-no" title="statement not covered" >import auth, { authSocket } from './authentication'</span>
1064
1116
  &nbsp;
1065
- const debug = makeDebug('kdk:core:application')
1066
- const debugLimiter = makeDebug('kdk:core:application:limiter')
1117
+ const debug = <span class="cstat-no" title="statement not covered" >makeDebug('</span>kdk:core:application')
1118
+ const debugLimiter = <span class="cstat-no" title="statement not covered" >makeDebug('</span>kdk:core:application:limiter')
1067
1119
  &nbsp;
1068
1120
  function <span class="fstat-no" title="function not covered" >tooManyRequests (s</span>ocket, message, key) {
1069
1121
  <span class="cstat-no" title="statement not covered" > debug(m</span>essage)
@@ -1073,114 +1125,114 @@ function <span class="fstat-no" title="function not covered" >tooManyRequests (s
1073
1125
  <span class="cstat-no" title="statement not covered" > setTimeout(<span class="fstat-no" title="function not covered" >(</span>) =&gt; <span class="cstat-no" title="statement not covered" >s</span>ocket.d</span>isconnect(true), 3000)
1074
1126
  }
1075
1127
  &nbsp;
1076
- export function declareService (path, app, service, middlewares = {}) {
1077
- const feathersPath = app.get('apiPath') + '/' + path
1078
- const feathersService = app.service(feathersPath)
1128
+ export function <span class="fstat-no" title="function not covered" >declareService (p</span>ath, app, service, middlewares = <span class="branch-0 cbranch-no" title="branch not covered" >{}) {</span>
1129
+ const feathersPath = <span class="cstat-no" title="statement not covered" >app.get('apiPath') + '/' + path</span>
1130
+ const feathersService = <span class="cstat-no" title="statement not covered" >app.s</span>ervice(feathersPath)
1079
1131
  // Some internal Feathers service might internally declare the service
1080
- if (feathersService) {
1081
- return feathersService
1132
+ <span class="cstat-no" title="statement not covered" > if (feathersService) {</span>
1133
+ <span class="cstat-no" title="statement not covered" > return f</span>eathersService
1082
1134
  }
1083
1135
  // Initialize our service by providing any middleware as well
1084
- let args = [feathersPath]
1085
- if (middlewares.before) args = args.concat(middlewares.before)
1086
- args.push(service)
1087
- <span class="missing-if-branch" title="if path not taken" >I</span>if (middlewares.after) <span class="cstat-no" title="statement not covered" >args = a</span>rgs.concat(middlewares.after)
1088
- app.use.apply(app, args)
1089
- debug('Service declared on path ' + feathersPath)
1136
+ let args = <span class="cstat-no" title="statement not covered" >[f</span>eathersPath]
1137
+ <span class="cstat-no" title="statement not covered" > if (middlewares.before) <span class="cstat-no" title="statement not covered" >args = a</span></span>rgs.concat(middlewares.before)
1138
+ <span class="cstat-no" title="statement not covered" > args.p</span>ush(service)
1139
+ <span class="cstat-no" title="statement not covered" > if (middlewares.after) <span class="cstat-no" title="statement not covered" >args = a</span></span>rgs.concat(middlewares.after)
1140
+ <span class="cstat-no" title="statement not covered" > app.u</span>se.apply(app, args)
1141
+ <span class="cstat-no" title="statement not covered" > debug('</span>Service declared on path ' + feathersPath)
1090
1142
  // Return the Feathers service, ie base service + Feathers' internals
1091
- return app.service(feathersPath)
1143
+ <span class="cstat-no" title="statement not covered" > return a</span>pp.service(feathersPath)
1092
1144
  }
1093
1145
  &nbsp;
1094
- export function configureService (name, service, servicesPath) {
1095
- try {
1096
- const hooks = require(path.join(servicesPath, name, name + '.hooks'))
1097
- service.hooks(hooks)
1098
- debug(name + ' service hooks configured on path ' + servicesPath)
1146
+ export function <span class="fstat-no" title="function not covered" >configureService (n</span>ame, service, servicesPath) {
1147
+ <span class="cstat-no" title="statement not covered" > try {</span>
1148
+ const hooks = <span class="cstat-no" title="statement not covered" >require(p</span>ath.join(servicesPath, name, name + '.hooks'))
1149
+ <span class="cstat-no" title="statement not covered" > service.h</span>ooks(hooks)
1150
+ <span class="cstat-no" title="statement not covered" > debug(n</span>ame + ' service hooks configured on path ' + servicesPath)
1099
1151
  } catch (error) {
1100
- debug('No ' + name + ' service hooks configured on path ' + servicesPath)
1101
- <span class="missing-if-branch" title="if path not taken" >I</span>if (error.code !== 'MODULE_NOT_FOUND') {
1152
+ <span class="cstat-no" title="statement not covered" > debug('</span>No ' + name + ' service hooks configured on path ' + servicesPath)
1153
+ <span class="cstat-no" title="statement not covered" > if (error.code !== 'MODULE_NOT_FOUND') {</span>
1102
1154
  // Log error in this case as this might be linked to a syntax error in required file
1103
1155
  <span class="cstat-no" title="statement not covered" > debug(e</span>rror)
1104
1156
  }
1105
1157
  // As this is optionnal this require has to fail silently
1106
1158
  }
1107
1159
  &nbsp;
1108
- try {
1109
- const channels = require(path.join(servicesPath, name, name + '.channels'))
1110
- _.forOwn(channels, (publisher, event) =&gt; {
1111
- <span class="missing-if-branch" title="else path not taken" >E</span>if (event === 'all') service.publish(publisher)
1160
+ <span class="cstat-no" title="statement not covered" > try {</span>
1161
+ const channels = <span class="cstat-no" title="statement not covered" >require(p</span>ath.join(servicesPath, name, name + '.channels'))
1162
+ <span class="cstat-no" title="statement not covered" > _.f</span>orOwn(channels, <span class="fstat-no" title="function not covered" >(p</span>ublisher, event) =&gt; {
1163
+ <span class="cstat-no" title="statement not covered" > if (event === 'all') <span class="cstat-no" title="statement not covered" >service.p</span>ublish(publisher)</span>
1112
1164
  else <span class="cstat-no" title="statement not covered" >service.p</span>ublish(event, publisher)
1113
1165
  })
1114
- debug(name + ' service channels configured on path ' + servicesPath)
1166
+ <span class="cstat-no" title="statement not covered" > debug(n</span>ame + ' service channels configured on path ' + servicesPath)
1115
1167
  } catch (error) {
1116
- debug('No ' + name + ' service channels configured on path ' + servicesPath)
1117
- <span class="missing-if-branch" title="if path not taken" >I</span>if (error.code !== 'MODULE_NOT_FOUND') {
1168
+ <span class="cstat-no" title="statement not covered" > debug('</span>No ' + name + ' service channels configured on path ' + servicesPath)
1169
+ <span class="cstat-no" title="statement not covered" > if (error.code !== 'MODULE_NOT_FOUND') {</span>
1118
1170
  // Log error in this case as this might be linked to a syntax error in required file
1119
1171
  <span class="cstat-no" title="statement not covered" > debug(e</span>rror)
1120
1172
  }
1121
1173
  // As this is optionnal this require has to fail silently
1122
1174
  }
1123
1175
  &nbsp;
1124
- return service
1176
+ <span class="cstat-no" title="statement not covered" > return s</span>ervice
1125
1177
  }
1126
1178
  &nbsp;
1127
- export function createProxyService (options) {
1128
- const targetService = options.service
1129
- function proxyParams (params) {
1130
- if (options.params) {
1179
+ export function <span class="fstat-no" title="function not covered" >createProxyService (o</span>ptions) {
1180
+ const targetService = <span class="cstat-no" title="statement not covered" >options.service</span>
1181
+ function <span class="fstat-no" title="function not covered" >proxyParams (p</span>arams) {
1182
+ <span class="cstat-no" title="statement not covered" > if (options.params) {</span>
1131
1183
  let proxiedParams
1132
- <span class="missing-if-branch" title="if path not taken" >I</span>if (typeof options.params === 'function') {
1184
+ <span class="cstat-no" title="statement not covered" > if (typeof options.params === 'function') {</span>
1133
1185
  <span class="cstat-no" title="statement not covered" > proxiedParams = o</span>ptions.params(params)
1134
1186
  } else {
1135
- proxiedParams = _.merge(params, options.params)
1187
+ <span class="cstat-no" title="statement not covered" > proxiedParams = _</span>.merge(params, options.params)
1136
1188
  }
1137
- return proxiedParams
1138
- } else return params
1189
+ <span class="cstat-no" title="statement not covered" > return p</span>roxiedParams
1190
+ } else <span class="cstat-no" title="statement not covered" >return p</span>arams
1139
1191
  }
1140
- function proxyId (id) {
1141
- if (options.id) return options.id(id)
1142
- else return id
1192
+ function <span class="fstat-no" title="function not covered" >proxyId (i</span>d) {
1193
+ <span class="cstat-no" title="statement not covered" > if (options.id) <span class="cstat-no" title="statement not covered" >return o</span>ptions.id(id)</span>
1194
+ else <span class="cstat-no" title="statement not covered" >return i</span>d
1143
1195
  }
1144
- function proxyData (data) {
1145
- if (options.data) return options.data(data)
1146
- else return data
1196
+ function <span class="fstat-no" title="function not covered" >proxyData (d</span>ata) {
1197
+ <span class="cstat-no" title="statement not covered" > if (options.data) <span class="cstat-no" title="statement not covered" >return o</span>ptions.data(data)</span>
1198
+ else <span class="cstat-no" title="statement not covered" >return d</span>ata
1147
1199
  }
1148
- function proxyResult (data) {
1149
- if (options.result) return options.result(data)
1150
- else return data
1200
+ function <span class="fstat-no" title="function not covered" >proxyResult (d</span>ata) {
1201
+ <span class="cstat-no" title="statement not covered" > if (options.result) <span class="cstat-no" title="statement not covered" >return o</span>ptions.result(data)</span>
1202
+ else <span class="cstat-no" title="statement not covered" >return d</span>ata
1151
1203
  }
1152
- return {
1153
- async find (params) { return proxyResult(await targetService.find(proxyParams(params))) },
1154
- async get (id, params) { return proxyResult(await targetService.get(proxyId(id), proxyParams(params))) },
1155
- async create (data, params) { return proxyResult(await targetService.create(proxyData(data), proxyParams(params))) },
1204
+ <span class="cstat-no" title="statement not covered" > return {</span>
1205
+ async <span class="fstat-no" title="function not covered" >find (p</span>arams) <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >{ <span class="cstat-no" title="statement not covered" >r</span></span>eturn p</span>roxyResult(await targetService.find(proxyParams(params))) },
1206
+ async <span class="fstat-no" title="function not covered" >get (i</span>d, params) <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >{ <span class="cstat-no" title="statement not covered" >r</span></span>eturn p</span>roxyResult(await targetService.get(proxyId(id), proxyParams(params))) },
1207
+ async <span class="fstat-no" title="function not covered" >create (d</span>ata, params) <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >{ <span class="cstat-no" title="statement not covered" >r</span></span>eturn p</span>roxyResult(await targetService.create(proxyData(data), proxyParams(params))) },
1156
1208
  async <span class="fstat-no" title="function not covered" >update (i</span>d, data, params) <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >{ <span class="cstat-no" title="statement not covered" >r</span></span>eturn p</span>roxyResult(await targetService.update(proxyId(id), proxyData(data), proxyParams(params))) },
1157
- async patch (id, data, params) { return proxyResult(await targetService.patch(proxyId(id), proxyData(data), proxyParams(params))) },
1158
- async remove (id, params) { return proxyResult(await targetService.remove(proxyId(id), proxyParams(params))) }
1209
+ async <span class="fstat-no" title="function not covered" >patch (i</span>d, data, params) <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >{ <span class="cstat-no" title="statement not covered" >r</span></span>eturn p</span>roxyResult(await targetService.patch(proxyId(id), proxyData(data), proxyParams(params))) },
1210
+ async <span class="fstat-no" title="function not covered" >remove (i</span>d, params) <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >{ <span class="cstat-no" title="statement not covered" >r</span></span>eturn p</span>roxyResult(await targetService.remove(proxyId(id), proxyParams(params))) }
1159
1211
  }
1160
1212
  }
1161
1213
  &nbsp;
1162
- export function createService (name, app, options = <span class="branch-0 cbranch-no" title="branch not covered" >{}) {</span>
1163
- const createFeathersService = require('feathers-' + app.db.adapter)
1214
+ export function <span class="fstat-no" title="function not covered" >createService (n</span>ame, app, options = <span class="branch-0 cbranch-no" title="branch not covered" >{}) {</span>
1215
+ const createFeathersService = <span class="cstat-no" title="statement not covered" >require('</span>feathers-' + app.db.adapter)
1164
1216
  &nbsp;
1165
- const paginate = app.get('paginate')
1166
- const serviceOptions = Object.assign({
1217
+ const paginate = <span class="cstat-no" title="statement not covered" >app.g</span>et('paginate')
1218
+ const serviceOptions = <span class="cstat-no" title="statement not covered" >Object.a</span>ssign({
1167
1219
  name: name,
1168
1220
  paginate
1169
1221
  }, options)
1170
- <span class="missing-if-branch" title="if path not taken" >I</span>if (serviceOptions.disabled) <span class="cstat-no" title="statement not covered" >return u</span>ndefined
1222
+ <span class="cstat-no" title="statement not covered" > if (serviceOptions.disabled) <span class="cstat-no" title="statement not covered" >return u</span></span>ndefined
1171
1223
  // For DB services a model has to be provided
1172
- const fileName = serviceOptions.fileName || name
1224
+ const fileName = <span class="cstat-no" title="statement not covered" >serviceOptions.fileName || name</span>
1173
1225
  &nbsp;
1174
- let dbService = false
1175
- try {
1176
- if (serviceOptions.modelsPath) {
1177
- const configureModel = require(path.join(serviceOptions.modelsPath, fileName + '.model.' + app.db.adapter))
1178
- configureModel(app, serviceOptions)
1179
- dbService = true
1226
+ let dbService = <span class="cstat-no" title="statement not covered" >false</span>
1227
+ <span class="cstat-no" title="statement not covered" > try {</span>
1228
+ <span class="cstat-no" title="statement not covered" > if (serviceOptions.modelsPath) {</span>
1229
+ const configureModel = <span class="cstat-no" title="statement not covered" >require(p</span>ath.join(serviceOptions.modelsPath, fileName + '.model.' + app.db.adapter))
1230
+ <span class="cstat-no" title="statement not covered" > configureModel(a</span>pp, serviceOptions)
1231
+ <span class="cstat-no" title="statement not covered" > dbService = t</span>rue
1180
1232
  }
1181
1233
  } catch (error) {
1182
- debug('No ' + fileName + ' service model configured on path ' + serviceOptions.modelsPath)
1183
- <span class="missing-if-branch" title="if path not taken" >I</span>if (error.code !== 'MODULE_NOT_FOUND') {
1234
+ <span class="cstat-no" title="statement not covered" > debug('</span>No ' + fileName + ' service model configured on path ' + serviceOptions.modelsPath)
1235
+ <span class="cstat-no" title="statement not covered" > if (error.code !== 'MODULE_NOT_FOUND') {</span>
1184
1236
  // Log error in this case as this might be linked to a syntax error in required file
1185
1237
  <span class="cstat-no" title="statement not covered" > debug(e</span>rror)
1186
1238
  }
@@ -1189,44 +1241,44 @@ export function createService (name, app, options = <span class="branch-0 cbranc
1189
1241
  &nbsp;
1190
1242
  // Initialize our service with any options it requires
1191
1243
  let service
1192
- if (dbService) {
1193
- service = createFeathersService(serviceOptions)
1194
- dbService = service
1195
- } else if (serviceOptions.proxy) {
1196
- service = createProxyService(serviceOptions.proxy)
1244
+ <span class="cstat-no" title="statement not covered" > if (dbService) {</span>
1245
+ <span class="cstat-no" title="statement not covered" > service = c</span>reateFeathersService(serviceOptions)
1246
+ <span class="cstat-no" title="statement not covered" > dbService = s</span>ervice
1247
+ } else <span class="cstat-no" title="statement not covered" >if (serviceOptions.proxy) {</span>
1248
+ <span class="cstat-no" title="statement not covered" > service = c</span>reateProxyService(serviceOptions.proxy)
1197
1249
  } else {
1198
1250
  // Otherwise we expect the service to be provided as a Feathers service interface
1199
- service = require(path.join(serviceOptions.servicesPath, fileName, fileName + '.service'))
1251
+ <span class="cstat-no" title="statement not covered" > service = r</span>equire(path.join(serviceOptions.servicesPath, fileName, fileName + '.service'))
1200
1252
  // If we get a function try to call it assuming it will return the service object
1201
- if (typeof service === 'function') {
1202
- service = service(name, app, serviceOptions)
1253
+ <span class="cstat-no" title="statement not covered" > if (typeof service === 'function') {</span>
1254
+ <span class="cstat-no" title="statement not covered" > service = s</span>ervice(name, app, serviceOptions)
1203
1255
  }
1204
1256
  // Need to set this manually for services not using class inheritance or default adapters
1205
- if (serviceOptions.events) service.events = serviceOptions.events
1257
+ <span class="cstat-no" title="statement not covered" > if (serviceOptions.events) <span class="cstat-no" title="statement not covered" >service.e</span></span>vents = serviceOptions.events
1206
1258
  }
1207
1259
  &nbsp;
1208
1260
  // Get our initialized service so that we can register hooks and filters
1209
- let servicePath = serviceOptions.path || name
1261
+ let servicePath = <span class="cstat-no" title="statement not covered" >serviceOptions.path || name</span>
1210
1262
  let contextId
1211
- if (serviceOptions.context) {
1212
- contextId = idToString(serviceOptions.context)
1213
- servicePath = contextId + '/' + servicePath
1263
+ <span class="cstat-no" title="statement not covered" > if (serviceOptions.context) {</span>
1264
+ <span class="cstat-no" title="statement not covered" > contextId = i</span>dToString(serviceOptions.context)
1265
+ <span class="cstat-no" title="statement not covered" > servicePath = c</span>ontextId + '/' + servicePath
1214
1266
  }
1215
- service = declareService(servicePath, app, service, serviceOptions.middlewares)
1267
+ <span class="cstat-no" title="statement not covered" > service = d</span>eclareService(servicePath, app, service, serviceOptions.middlewares)
1216
1268
  // Register hooks and event filters
1217
- service = configureService(fileName, service, serviceOptions.servicesPath)
1269
+ <span class="cstat-no" title="statement not covered" > service = c</span>onfigureService(fileName, service, serviceOptions.servicesPath)
1218
1270
  // Optionnally a specific service mixin can be provided, apply it
1219
- if (dbService &amp;&amp; serviceOptions.servicesPath) {
1220
- try {
1221
- let serviceMixin = require(path.join(serviceOptions.servicesPath, fileName, fileName + '.service'))
1271
+ <span class="cstat-no" title="statement not covered" > if (dbService &amp;&amp; serviceOptions.servicesPath) {</span>
1272
+ <span class="cstat-no" title="statement not covered" > try {</span>
1273
+ let serviceMixin = <span class="cstat-no" title="statement not covered" >require(p</span>ath.join(serviceOptions.servicesPath, fileName, fileName + '.service'))
1222
1274
  // If we get a function try to call it assuming it will return the mixin object
1223
- <span class="missing-if-branch" title="else path not taken" >E</span>if (typeof serviceMixin === 'function') {
1224
- serviceMixin = serviceMixin.bind(dbService)(fileName, app, serviceOptions)
1275
+ <span class="cstat-no" title="statement not covered" > if (typeof serviceMixin === 'function') {</span>
1276
+ <span class="cstat-no" title="statement not covered" > serviceMixin = s</span>erviceMixin.bind(dbService)(fileName, app, serviceOptions)
1225
1277
  }
1226
- service.mixin(serviceMixin)
1278
+ <span class="cstat-no" title="statement not covered" > service.m</span>ixin(serviceMixin)
1227
1279
  } catch (error) {
1228
- debug('No ' + fileName + ' service mixin configured on path ' + serviceOptions.servicesPath)
1229
- <span class="missing-if-branch" title="if path not taken" >I</span>if (error.code !== 'MODULE_NOT_FOUND') {
1280
+ <span class="cstat-no" title="statement not covered" > debug('</span>No ' + fileName + ' service mixin configured on path ' + serviceOptions.servicesPath)
1281
+ <span class="cstat-no" title="statement not covered" > if (error.code !== 'MODULE_NOT_FOUND') {</span>
1230
1282
  // Log error in this case as this might be linked to a syntax error in required file
1231
1283
  <span class="cstat-no" title="statement not covered" > debug(e</span>rror)
1232
1284
  }
@@ -1234,109 +1286,135 @@ export function createService (name, app, options = <span class="branch-0 cbranc
1234
1286
  }
1235
1287
  }
1236
1288
  // Then configuration
1237
- service.name = name
1238
- service.app = app
1239
- service.options = serviceOptions
1240
- service.path = servicePath
1241
- service.context = serviceOptions.context
1289
+ <span class="cstat-no" title="statement not covered" > service.n</span>ame = name
1290
+ <span class="cstat-no" title="statement not covered" > service.a</span>pp = app
1291
+ <span class="cstat-no" title="statement not covered" > service.o</span>ptions = serviceOptions
1292
+ <span class="cstat-no" title="statement not covered" > service.p</span>ath = servicePath
1293
+ <span class="cstat-no" title="statement not covered" > service.c</span>ontext = serviceOptions.context
1242
1294
  &nbsp;
1243
1295
  // Add some utility functions
1244
- service.getPath = function (withApiPrefix) {
1245
- let path = service.path
1246
- if (withApiPrefix) {
1247
- path = app.get('apiPath') + '/' + path
1296
+ <span class="cstat-no" title="statement not covered" > service.g</span>etPath = <span class="fstat-no" title="function not covered" >function (w</span>ithApiPrefix) {
1297
+ let path = <span class="cstat-no" title="statement not covered" >service.path</span>
1298
+ <span class="cstat-no" title="statement not covered" > if (withApiPrefix) {</span>
1299
+ <span class="cstat-no" title="statement not covered" > path = a</span>pp.get('apiPath') + '/' + path
1248
1300
  }
1249
- return path
1301
+ <span class="cstat-no" title="statement not covered" > return p</span>ath
1250
1302
  }
1251
- service.getContextId = function () {
1252
- return contextId // As string
1303
+ <span class="cstat-no" title="statement not covered" > service.g</span>etContextId = <span class="fstat-no" title="function not covered" >function () {</span>
1304
+ <span class="cstat-no" title="statement not covered" > return c</span>ontextId // As string
1253
1305
  }
1254
1306
  &nbsp;
1255
- debug(service.name + ' service registration completed')
1256
- app.emit('service', service)
1307
+ <span class="cstat-no" title="statement not covered" > debug(s</span>ervice.name + ' service registration completed')
1308
+ <span class="cstat-no" title="statement not covered" > app.e</span>mit('service', service)
1257
1309
  &nbsp;
1258
- return service
1310
+ <span class="cstat-no" title="statement not covered" > return s</span>ervice
1259
1311
  }
1260
1312
  &nbsp;
1261
- export function createWebhook (path, app, options = <span class="branch-0 cbranch-no" title="branch not covered" >{}) {</span>
1262
- let webhookPath = path
1263
- <span class="missing-if-branch" title="if path not taken" >I</span>if (options.context) {
1313
+ export function <span class="fstat-no" title="function not covered" >createWebhook (p</span>ath, app, options = <span class="branch-0 cbranch-no" title="branch not covered" >{}) {</span>
1314
+ let webhookPath = <span class="cstat-no" title="statement not covered" >path</span>
1315
+ <span class="cstat-no" title="statement not covered" > if (options.context) {</span>
1264
1316
  <span class="cstat-no" title="statement not covered" > webhookPath = i</span>dToString(options.context) + '/' + webhookPath
1265
1317
  }
1266
- const isAllowed = (payload) =&gt; {
1318
+ const isAllowed = (<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >payload) =&gt; {</span></span>
1267
1319
  // Default is to expose all services/operations
1268
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!options.filter) <span class="cstat-no" title="statement not covered" >return t</span>rue
1269
- const result = [payload].filter(sift(options.filter))
1270
- return result.length &gt; 0
1320
+ <span class="cstat-no" title="statement not covered" > if (!options.filter) <span class="cstat-no" title="statement not covered" >return t</span></span>rue
1321
+ const result = <span class="cstat-no" title="statement not covered" >[p</span>ayload].filter(sift(options.filter))
1322
+ <span class="cstat-no" title="statement not covered" > return r</span>esult.length &gt; 0
1271
1323
  }
1272
1324
  &nbsp;
1273
- app.post(app.get('apiPath') + '/webhooks/' + webhookPath, async (req, res, next) =&gt; {
1274
- const payload = req.body
1275
- const config = app.get('authentication')
1276
- res.set('Content-Type', 'application/json')
1277
- const params = {}
1278
- try {
1325
+ <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" > app.p</span></span>ost(app.get('apiPath') + '/webhooks/' + webhookPath, <span class="fstat-no" title="function not covered" >async (r</span>eq, res, next) =&gt; {
1326
+ const payload = <span class="cstat-no" title="statement not covered" >req.body</span>
1327
+ const config = <span class="cstat-no" title="statement not covered" >app.g</span>et('authentication')
1328
+ <span class="cstat-no" title="statement not covered" > res.s</span>et('content-type', 'application/json')
1329
+ const params = <span class="cstat-no" title="statement not covered" >{}</span>
1330
+ <span class="cstat-no" title="statement not covered" > try {</span>
1331
+ <span class="cstat-no" title="statement not covered" > if (options.preprocessor) {</span>
1332
+ <span class="cstat-no" title="statement not covered" > await o</span>ptions.preprocessor(req, res, payload)
1333
+ }
1279
1334
  // Authenticate when required
1280
- <span class="missing-if-branch" title="else path not taken" >E</span>if (config) {
1281
- try {
1282
- const tokenPayload = await app.passport.verifyJWT(payload.accessToken, config)
1283
- <span class="missing-if-branch" title="else path not taken" >E</span>if (tokenPayload.userId) {
1284
- params.user = await app.getService('users').get(tokenPayload.userId)
1285
- params.checkAuthorisation = true
1335
+ <span class="cstat-no" title="statement not covered" > if (config) {</span>
1336
+ <span class="cstat-no" title="statement not covered" > try {</span>
1337
+ // Token is in header or payload
1338
+ const header = <span class="cstat-no" title="statement not covered" >req.headers.authorization</span>
1339
+ let accessToken
1340
+ <span class="cstat-no" title="statement not covered" > if (header) {</span>
1341
+ // Should be of the form: 'Bearer xxx'
1342
+ const tokens = <span class="cstat-no" title="statement not covered" >header.m</span>atch(/(\S+)\s+(\S+)/)
1343
+ <span class="cstat-no" title="statement not covered" > if (tokens.length &gt;= 2) <span class="cstat-no" title="statement not covered" >accessToken = t</span></span>okens[2]
1344
+ } else {
1345
+ <span class="cstat-no" title="statement not covered" > accessToken = p</span>ayload.accessToken
1286
1346
  }
1347
+ const tokenPayload = <span class="cstat-no" title="statement not covered" >await app.p</span>assport.verifyJWT(accessToken, config)
1348
+ <span class="cstat-no" title="statement not covered" > params.u</span>ser = await app.getService('users').get(tokenPayload.userId)
1349
+ <span class="cstat-no" title="statement not covered" > params.c</span>heckAuthorisation = true
1287
1350
  } catch (error) {
1288
- throw new Forbidden('Could not verify webhook')
1351
+ <span class="cstat-no" title="statement not covered" > throw n</span>ew Forbidden('Could not verify webhook')
1289
1352
  }
1290
1353
  }
1291
- if (!isAllowed(payload)) throw new Forbidden('Service not allowed for webhook')
1292
- const service = app.getService(payload.service, options.context || payload.context)
1293
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!service) <span class="cstat-no" title="statement not covered" >throw n</span>ew BadRequest('Service could not be found')
1294
- const args = []
1295
- // Update/Patch/Remove
1296
- <span class="missing-if-branch" title="else path not taken" >E</span>if (_.has(payload, 'id')) args.push(_.get(payload, 'id'))
1354
+ <span class="cstat-no" title="statement not covered" > if (req.headers['content-type'] !== 'application/json') {</span>
1355
+ <span class="cstat-no" title="statement not covered" > throw n</span>ew BadRequest('Webhooks expect application/json content type')
1356
+ }
1357
+ <span class="cstat-no" title="statement not covered" > if (!isAllowed(payload)) <span class="cstat-no" title="statement not covered" >throw n</span></span>ew Forbidden('Service or operation not allowed for webhook')
1358
+ const service = <span class="cstat-no" title="statement not covered" >app.g</span>etService(payload.service, options.context || payload.context)
1359
+ <span class="cstat-no" title="statement not covered" > if (!service) <span class="cstat-no" title="statement not covered" >throw n</span></span>ew BadRequest('Service could not be found')
1360
+ <span class="cstat-no" title="statement not covered" > if (typeof service[payload.operation] !== 'function') <span class="cstat-no" title="statement not covered" >throw n</span></span>ew BadRequest('Service operation could not be found')
1361
+ const args = <span class="cstat-no" title="statement not covered" >[]</span>
1362
+ // Get/Update/Patch/Remove
1363
+ const operationsWithId = <span class="cstat-no" title="statement not covered" >['</span>get', 'update', 'patch', 'remove']
1364
+ <span class="cstat-no" title="statement not covered" > if (operationsWithId.includes(payload.operation)) {</span>
1365
+ <span class="cstat-no" title="statement not covered" > if (!_.has(payload, 'id')) <span class="cstat-no" title="statement not covered" >throw n</span></span>ew BadRequest('Missing id for operation')
1366
+ <span class="cstat-no" title="statement not covered" > args.p</span>ush(_.get(payload, 'id'))
1367
+ }
1297
1368
  // Create/Update/Patch
1298
- <span class="missing-if-branch" title="if path not taken" >I</span>if (_.has(payload, 'data')) <span class="cstat-no" title="statement not covered" >args.p</span>ush(_.get(payload, 'data'))
1369
+ const operationsWithData = <span class="cstat-no" title="statement not covered" >['</span>create', 'update', 'patch']
1370
+ <span class="cstat-no" title="statement not covered" > if (operationsWithData.includes(payload.operation)) {</span>
1371
+ <span class="cstat-no" title="statement not covered" > if (!_.has(payload, 'data')) <span class="cstat-no" title="statement not covered" >throw n</span></span>ew BadRequest('Missing data for operation')
1372
+ <span class="cstat-no" title="statement not covered" > args.p</span>ush(_.get(payload, 'data'))
1373
+ }
1299
1374
  // Params
1300
- args.push(params)
1301
- try {
1302
- const result = await service[payload.operation].apply(service, args)
1375
+ <span class="cstat-no" title="statement not covered" > args.p</span>ush(params)
1376
+ <span class="cstat-no" title="statement not covered" > if (options.postprocessor) {</span>
1377
+ <span class="cstat-no" title="statement not covered" > await o</span>ptions.postprocessor(service, args, payload)
1378
+ }
1379
+ <span class="cstat-no" title="statement not covered" > try {</span>
1380
+ const result = <span class="cstat-no" title="statement not covered" >await service[p</span>ayload.operation].apply(service, args)
1303
1381
  // Send back result
1304
- res.json(result)
1382
+ <span class="cstat-no" title="statement not covered" > res.j</span>son(result)
1305
1383
  } catch (error) {
1306
1384
  <span class="cstat-no" title="statement not covered" > throw n</span>ew BadRequest('Service operation could not be performed')
1307
1385
  }
1308
1386
  } catch (error) {
1309
1387
  // Send back error
1310
- res.status(error.code).json(error.toJSON())
1388
+ <span class="cstat-no" title="statement not covered" > res.s</span>tatus(error.code).json(error.toJSON())
1311
1389
  }
1312
1390
  })
1313
1391
  &nbsp;
1314
- debug(`Webhook ${webhookPath} registration completed`)
1392
+ <span class="cstat-no" title="statement not covered" > debug(`W</span>ebhook ${webhookPath} registration completed`)
1315
1393
  }
1316
1394
  &nbsp;
1317
- function setupLogger (app) {
1318
- debug('Setup application loggers')
1319
- const logsConfig = app.get('logs')
1395
+ function <span class="fstat-no" title="function not covered" >setupLogger (a</span>pp) {
1396
+ <span class="cstat-no" title="statement not covered" > debug('</span>Setup application loggers')
1397
+ const logsConfig = <span class="cstat-no" title="statement not covered" >app.g</span>et('logs')
1320
1398
  // Use winston default logger
1321
- app.logger = logger
1399
+ <span class="cstat-no" title="statement not covered" > app.l</span>ogger = logger
1322
1400
  // Remove winston defaults
1323
- try {
1324
- logger.clear()
1401
+ <span class="cstat-no" title="statement not covered" > try {</span>
1402
+ <span class="cstat-no" title="statement not covered" > logger.c</span>lear()
1325
1403
  } catch (error) {
1326
1404
  // Logger might be down, use console
1327
1405
  <span class="cstat-no" title="statement not covered" > console.e</span>rror('Could not remove default logger transport(s)', error)
1328
1406
  }
1329
1407
  // We have one entry per log type
1330
- const logsTypes = logsConfig ? Object.getOwnPropertyNames(logsConfig) : <span class="branch-1 cbranch-no" title="branch not covered" >[]</span>
1408
+ const logsTypes = <span class="cstat-no" title="statement not covered" >logsConfig ? Object.getOwnPropertyNames(logsConfig) : []</span>
1331
1409
  // Create corresponding winston transports with options
1332
- logsTypes.forEach(logType =&gt; {
1333
- const options = logsConfig[logType]
1410
+ <span class="cstat-no" title="statement not covered" > logsTypes.f</span>orEach(<span class="fstat-no" title="function not covered" >logType =&gt; {</span>
1411
+ const options = <span class="cstat-no" title="statement not covered" >logsConfig[l</span>ogType]
1334
1412
  // Setup default log level if not defined
1335
- if (!options.level) {
1336
- options.level = (process.env.NODE_ENV === 'development' ? <span class="branch-0 cbranch-no" title="branch not covered" >'debug' : '</span>info')
1413
+ <span class="cstat-no" title="statement not covered" > if (!options.level) {</span>
1414
+ <span class="cstat-no" title="statement not covered" > options.l</span>evel = (process.env.NODE_ENV === 'development' ? 'debug' : 'info')
1337
1415
  }
1338
- try {
1339
- logger.add(new logger.transports[logType](options))
1416
+ <span class="cstat-no" title="statement not covered" > try {</span>
1417
+ <span class="cstat-no" title="statement not covered" > logger.a</span>dd(new logger.transports[logType](options))
1340
1418
  } catch (error) {
1341
1419
  // Logger might be down, use console
1342
1420
  <span class="cstat-no" title="statement not covered" > console.e</span>rror('Could not setup default log levels', error)
@@ -1344,19 +1422,19 @@ function setupLogger (app) {
1344
1422
  })
1345
1423
  }
1346
1424
  &nbsp;
1347
- function setupSockets (app) {
1348
- const apiLimiter = app.get('apiLimiter')
1349
- const connections = {}
1350
- let nbConnections = 0
1425
+ function <span class="fstat-no" title="function not covered" >setupSockets (a</span>pp) {
1426
+ const apiLimiter = <span class="cstat-no" title="statement not covered" >app.g</span>et('apiLimiter')
1427
+ const connections = <span class="cstat-no" title="statement not covered" >{}</span>
1428
+ let nbConnections = <span class="cstat-no" title="statement not covered" >0</span>
1351
1429
  &nbsp;
1352
- return io =&gt; {
1430
+ <span class="cstat-no" title="statement not covered" > return <span class="fstat-no" title="function not covered" >i</span>o =&gt; {</span>
1353
1431
  // By default EventEmitters will print a warning if more than 10 listeners are added for a particular event.
1354
1432
  // The value can be set to Infinity (or 0) to indicate an unlimited number of listeners.
1355
- io.sockets.setMaxListeners(0)
1356
- const maxConnections = _.get(apiLimiter, 'websocket.maxConcurrency', 0)
1357
- const maxIpConnections = _.get(apiLimiter, 'websocket.concurrency', 0)
1433
+ <span class="cstat-no" title="statement not covered" > io.s</span>ockets.setMaxListeners(0)
1434
+ const maxConnections = <span class="cstat-no" title="statement not covered" >_.g</span>et(apiLimiter, 'websocket.maxConcurrency', 0)
1435
+ const maxIpConnections = <span class="cstat-no" title="statement not covered" >_.g</span>et(apiLimiter, 'websocket.concurrency', 0)
1358
1436
  &nbsp;
1359
- io.on('connection', <span class="fstat-no" title="function not covered" >socket =&gt; {</span>
1437
+ <span class="cstat-no" title="statement not covered" > io.o</span>n('connection', <span class="fstat-no" title="function not covered" >socket =&gt; {</span>
1360
1438
  <span class="cstat-no" title="statement not covered" > nbConnections++</span>
1361
1439
  <span class="cstat-no" title="statement not covered" > debug(`N</span>ew socket connection on server with pid ${process.pid}`, socket.id, socket.conn.remoteAddress, nbConnections)
1362
1440
  // Setup disconnect handler first
@@ -1437,55 +1515,55 @@ function setupSockets (app) {
1437
1515
  }
1438
1516
  }
1439
1517
  &nbsp;
1440
- export function kalisio () {
1441
- const app = express(feathers())
1518
+ export function <span class="fstat-no" title="function not covered" >kalisio () {</span>
1519
+ const app = <span class="cstat-no" title="statement not covered" >express(f</span>eathers())
1442
1520
  // By default EventEmitters will print a warning if more than 10 listeners are added for a particular event.
1443
1521
  // The value can be set to Infinity (or 0) to indicate an unlimited number of listeners.
1444
- app.setMaxListeners(0)
1522
+ <span class="cstat-no" title="statement not covered" > app.s</span>etMaxListeners(0)
1445
1523
  // Load app configuration first
1446
- app.configure(configuration())
1524
+ <span class="cstat-no" title="statement not covered" > app.c</span>onfigure(configuration())
1447
1525
  // Then setup logger
1448
- setupLogger(app)
1526
+ <span class="cstat-no" title="statement not covered" > setupLogger(a</span>pp)
1449
1527
  &nbsp;
1450
1528
  // This retrieve corresponding service options from app config if any
1451
- app.getServiceOptions = <span class="fstat-no" title="function not covered" >function (n</span>ame) {
1529
+ <span class="cstat-no" title="statement not covered" > app.g</span>etServiceOptions = <span class="fstat-no" title="function not covered" >function (n</span>ame) {
1452
1530
  const services = <span class="cstat-no" title="statement not covered" >app.g</span>et('services')
1453
1531
  <span class="cstat-no" title="statement not covered" > if (!services) <span class="cstat-no" title="statement not covered" >return {</span></span>}
1454
1532
  <span class="cstat-no" title="statement not covered" > return _</span>.get(services, name, {})
1455
1533
  }
1456
1534
  // This avoid managing the API path before each service name
1457
- app.getService = function (path, context) {
1535
+ <span class="cstat-no" title="statement not covered" > app.g</span>etService = <span class="fstat-no" title="function not covered" >function (p</span>ath, context) {
1458
1536
  // Context is given as string ID
1459
- if (context &amp;&amp; typeof context === 'string') {
1460
- return app.service(app.get('apiPath') + '/' + context + '/' + path)
1461
- } else if (context &amp;&amp; typeof context === 'object') {
1537
+ <span class="cstat-no" title="statement not covered" > if (context &amp;&amp; typeof context === 'string') {</span>
1538
+ <span class="cstat-no" title="statement not covered" > return a</span>pp.service(app.get('apiPath') + '/' + context + '/' + path)
1539
+ } else <span class="cstat-no" title="statement not covered" >if (context &amp;&amp; typeof context === 'object') {</span>
1462
1540
  // Could be Object ID or raw object
1463
- if (ObjectID.isValid(context)) return app.service(app.get('apiPath') + '/' + context.toString() + '/' + path)
1464
- else return app.service(app.get('apiPath') + '/' + context._id.toString() + '/' + path)
1541
+ <span class="cstat-no" title="statement not covered" > if (ObjectID.isValid(context)) <span class="cstat-no" title="statement not covered" >return a</span>pp.service(app.get('apiPath') + '/' + context.toString() + '/' + path)</span>
1542
+ else <span class="cstat-no" title="statement not covered" >return a</span>pp.service(app.get('apiPath') + '/' + context._id.toString() + '/' + path)
1465
1543
  } else {
1466
- return app.service(app.get('apiPath') + '/' + path)
1544
+ <span class="cstat-no" title="statement not covered" > return a</span>pp.service(app.get('apiPath') + '/' + path)
1467
1545
  }
1468
1546
  }
1469
1547
  // This is used to add hooks/filters to services
1470
- app.configureService = <span class="fstat-no" title="function not covered" >function (n</span>ame, service, servicesPath) {
1548
+ <span class="cstat-no" title="statement not covered" > app.c</span>onfigureService = <span class="fstat-no" title="function not covered" >function (n</span>ame, service, servicesPath) {
1471
1549
  <span class="cstat-no" title="statement not covered" > return c</span>onfigureService(name, service, servicesPath)
1472
1550
  }
1473
1551
  // This is used to create standard services
1474
- app.createService = function (name, options) {
1475
- return createService(name, app, options)
1552
+ <span class="cstat-no" title="statement not covered" > app.c</span>reateService = <span class="fstat-no" title="function not covered" >function (n</span>ame, options) {
1553
+ <span class="cstat-no" title="statement not covered" > return c</span>reateService(name, app, options)
1476
1554
  }
1477
1555
  // This is used to create webhooks
1478
- app.createWebhook = function (path, options) {
1479
- return createWebhook(path, app, options)
1556
+ <span class="cstat-no" title="statement not covered" > app.c</span>reateWebhook = <span class="fstat-no" title="function not covered" >function (p</span>ath, options) {
1557
+ <span class="cstat-no" title="statement not covered" > return c</span>reateWebhook(path, app, options)
1480
1558
  }
1481
1559
  // Override Feathers configure that do not manage async operations,
1482
1560
  // here we also simply call the function given as parameter but await for it
1483
- app.configure = async function (fn) {
1484
- await fn.call(this, this)
1485
- return this
1561
+ <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" > app.c</span></span>onfigure = <span class="fstat-no" title="function not covered" >async function (f</span>n) {
1562
+ <span class="cstat-no" title="statement not covered" > await f</span>n.call(this, this)
1563
+ <span class="cstat-no" title="statement not covered" > return t</span>his
1486
1564
  }
1487
- const apiLimiter = app.get('apiLimiter')
1488
- <span class="missing-if-branch" title="if path not taken" >I</span>if (apiLimiter &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >apiLimiter.http) {</span>
1565
+ const apiLimiter = <span class="cstat-no" title="statement not covered" >app.g</span>et('apiLimiter')
1566
+ <span class="cstat-no" title="statement not covered" > if (apiLimiter &amp;&amp; apiLimiter.http) {</span>
1489
1567
  // Function used to filter whitelisted services, defaults to none
1490
1568
  const services = <span class="cstat-no" title="statement not covered" >_.g</span>et(apiLimiter.http, 'services', (<span class="fstat-no" title="function not covered" >service) =&gt; <span class="cstat-no" title="statement not covered" >f</span>alse)</span>
1491
1569
  const handler = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >(r</span>eq, res, next) =&gt; {</span>
@@ -1512,23 +1590,23 @@ export function kalisio () {
1512
1590
  }
1513
1591
  &nbsp;
1514
1592
  // Enable CORS, security, compression, and body parsing
1515
- app.use(cors(app.get('cors')))
1516
- app.use(helmet(app.get('helmet')))
1517
- app.use(compress(app.get('compression')))
1518
- const bodyParserConfig = app.get('bodyParser')
1519
- app.use(bodyParser.json(_.get(bodyParserConfig, 'json')))
1520
- app.use(bodyParser.urlencoded(Object.assign({ extended: true }, _.get(bodyParserConfig, 'urlencoded'))))
1593
+ <span class="cstat-no" title="statement not covered" > app.u</span>se(cors(app.get('cors')))
1594
+ <span class="cstat-no" title="statement not covered" > app.u</span>se(helmet(app.get('helmet')))
1595
+ <span class="cstat-no" title="statement not covered" > app.u</span>se(compress(app.get('compression')))
1596
+ const bodyParserConfig = <span class="cstat-no" title="statement not covered" >app.g</span>et('bodyParser')
1597
+ <span class="cstat-no" title="statement not covered" > app.u</span>se(bodyParser.json(_.get(bodyParserConfig, 'json')))
1598
+ <span class="cstat-no" title="statement not covered" > app.u</span>se(bodyParser.urlencoded(Object.assign({ extended: true }, _.get(bodyParserConfig, 'urlencoded'))))
1521
1599
  &nbsp;
1522
1600
  // Set up plugins and providers
1523
- app.configure(rest())
1524
- const socketioConfig = app.get('socketio') || {}
1525
- app.configure(socketio(Object.assign({ path: app.get('apiPath') + 'ws' }, socketioConfig), setupSockets(app)))
1526
- app.configure(auth)
1601
+ <span class="cstat-no" title="statement not covered" > app.c</span>onfigure(rest())
1602
+ const socketioConfig = <span class="cstat-no" title="statement not covered" >app.get('socketio') || {}</span>
1603
+ <span class="cstat-no" title="statement not covered" > app.c</span>onfigure(socketio(Object.assign({ path: app.get('apiPath') + 'ws' }, socketioConfig), setupSockets(app)))
1604
+ <span class="cstat-no" title="statement not covered" > app.c</span>onfigure(auth)
1527
1605
  &nbsp;
1528
1606
  // Initialize DB
1529
- app.db = Database.create(app)
1607
+ <span class="cstat-no" title="statement not covered" > app.d</span>b = Database.create(app)
1530
1608
  &nbsp;
1531
- return app
1609
+ <span class="cstat-no" title="statement not covered" > return a</span>pp
1532
1610
  }
1533
1611
  &nbsp;</pre></td></tr></table></pre>
1534
1612
 
@@ -1537,7 +1615,7 @@ export function kalisio () {
1537
1615
  <div class='footer quiet pad2 space-top1 center small'>
1538
1616
  Code coverage generated by
1539
1617
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
1540
- at Wed Dec 08 2021 20:41:51 GMT+0100 (GMT+01:00)
1618
+ at Thu Feb 17 2022 13:49:01 GMT+0100 (GMT+01:00)
1541
1619
  </div>
1542
1620
  </div>
1543
1621
  <script src="../../prettify.js"></script>