@kalisio/kdk 2.5.2 → 2.5.3

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 (275) hide show
  1. package/core/client/components/input/KShapePicker.vue +4 -4
  2. package/coverage/core/api/application.js.html +344 -344
  3. package/coverage/core/api/authentication.js.html +79 -79
  4. package/coverage/core/api/db.js.html +167 -167
  5. package/coverage/core/api/hooks/hooks.authentication.js.html +12 -12
  6. package/coverage/core/api/hooks/hooks.authorisations.js.html +166 -163
  7. package/coverage/core/api/hooks/hooks.groups.js.html +1 -1
  8. package/coverage/core/api/hooks/hooks.logger.js.html +18 -18
  9. package/coverage/core/api/hooks/hooks.model.js.html +280 -268
  10. package/coverage/core/api/hooks/hooks.organisations.js.html +1 -1
  11. package/coverage/core/api/hooks/hooks.push.js.html +12 -12
  12. package/coverage/core/api/hooks/hooks.query.js.html +92 -92
  13. package/coverage/core/api/hooks/hooks.schemas.js.html +13 -13
  14. package/coverage/core/api/hooks/hooks.service.js.html +28 -28
  15. package/coverage/core/api/hooks/hooks.storage.js.html +7 -7
  16. package/coverage/core/api/hooks/hooks.users.js.html +48 -48
  17. package/coverage/core/api/hooks/index.html +49 -49
  18. package/coverage/core/api/hooks/index.js.html +11 -11
  19. package/coverage/core/api/index.html +42 -42
  20. package/coverage/core/api/index.js.html +22 -22
  21. package/coverage/core/api/marshall.js.html +127 -127
  22. package/coverage/core/api/models/groups.model.mongodb.js.html +1 -1
  23. package/coverage/core/api/models/index.html +1 -1
  24. package/coverage/core/api/models/messages.model.mongodb.js.html +1 -1
  25. package/coverage/core/api/models/organisations.model.mongodb.js.html +1 -1
  26. package/coverage/core/api/models/tags.model.mongodb.js.html +1 -1
  27. package/coverage/core/api/models/users.model.mongodb.js.html +11 -11
  28. package/coverage/core/api/services/account/account.hooks.js.html +42 -42
  29. package/coverage/core/api/services/account/account.service.js.html +34 -34
  30. package/coverage/core/api/services/account/index.html +1 -1
  31. package/coverage/core/api/services/authorisations/authorisations.hooks.js.html +34 -34
  32. package/coverage/core/api/services/authorisations/authorisations.service.js.html +108 -120
  33. package/coverage/core/api/services/authorisations/index.html +19 -19
  34. package/coverage/core/api/services/databases/databases.hooks.js.html +1 -1
  35. package/coverage/core/api/services/databases/databases.service.js.html +1 -1
  36. package/coverage/core/api/services/databases/index.html +1 -1
  37. package/coverage/core/api/services/groups/groups.hooks.js.html +1 -1
  38. package/coverage/core/api/services/groups/index.html +1 -1
  39. package/coverage/core/api/services/import-export/import-export.hooks.js.html +1 -1
  40. package/coverage/core/api/services/import-export/import-export.service.js.html +1 -1
  41. package/coverage/core/api/services/import-export/index.html +1 -1
  42. package/coverage/core/api/services/index.html +15 -15
  43. package/coverage/core/api/services/index.js.html +97 -85
  44. package/coverage/core/api/services/mailer/index.html +1 -1
  45. package/coverage/core/api/services/mailer/mailer.hooks.js.html +1 -1
  46. package/coverage/core/api/services/mailer/mailer.service.js.html +1 -1
  47. package/coverage/core/api/services/messages/index.html +5 -5
  48. package/coverage/core/api/services/messages/messages.hooks.js.html +11 -8
  49. package/coverage/core/api/services/organisations/index.html +1 -1
  50. package/coverage/core/api/services/organisations/organisations.hooks.js.html +1 -1
  51. package/coverage/core/api/services/organisations/organisations.service.js.html +1 -1
  52. package/coverage/core/api/services/push/index.html +1 -1
  53. package/coverage/core/api/services/push/push.hooks.js.html +1 -1
  54. package/coverage/core/api/services/push/push.service.js.html +1 -1
  55. package/coverage/core/api/services/storage/index.html +1 -1
  56. package/coverage/core/api/services/storage/storage.hooks.js.html +36 -36
  57. package/coverage/core/api/services/storage/storage.service.js.html +30 -30
  58. package/coverage/core/api/services/tags/index.html +1 -1
  59. package/coverage/core/api/services/tags/tags.hooks.js.html +1 -1
  60. package/coverage/core/api/services/users/index.html +7 -7
  61. package/coverage/core/api/services/users/users.hooks.js.html +83 -80
  62. package/coverage/core/api/services/users/users.service.js.html +4 -4
  63. package/coverage/core/api/utils.js.html +1 -1
  64. package/coverage/core/common/errors.js.html +2 -2
  65. package/coverage/core/common/index.html +30 -30
  66. package/coverage/core/common/index.js.html +11 -11
  67. package/coverage/core/common/permissions.js.html +187 -187
  68. package/coverage/core/common/schema.js.html +26 -26
  69. package/coverage/core/common/utils.js.html +61 -61
  70. package/coverage/core/common/utils.offline.js.html +6 -6
  71. package/coverage/index.html +179 -164
  72. package/coverage/lcov-report/core/api/application.js.html +344 -344
  73. package/coverage/lcov-report/core/api/authentication.js.html +79 -79
  74. package/coverage/lcov-report/core/api/db.js.html +167 -167
  75. package/coverage/lcov-report/core/api/hooks/hooks.authentication.js.html +12 -12
  76. package/coverage/lcov-report/core/api/hooks/hooks.authorisations.js.html +166 -163
  77. package/coverage/lcov-report/core/api/hooks/hooks.groups.js.html +1 -1
  78. package/coverage/lcov-report/core/api/hooks/hooks.logger.js.html +18 -18
  79. package/coverage/lcov-report/core/api/hooks/hooks.model.js.html +280 -268
  80. package/coverage/lcov-report/core/api/hooks/hooks.organisations.js.html +1 -1
  81. package/coverage/lcov-report/core/api/hooks/hooks.push.js.html +12 -12
  82. package/coverage/lcov-report/core/api/hooks/hooks.query.js.html +92 -92
  83. package/coverage/lcov-report/core/api/hooks/hooks.schemas.js.html +13 -13
  84. package/coverage/lcov-report/core/api/hooks/hooks.service.js.html +28 -28
  85. package/coverage/lcov-report/core/api/hooks/hooks.storage.js.html +7 -7
  86. package/coverage/lcov-report/core/api/hooks/hooks.users.js.html +48 -48
  87. package/coverage/lcov-report/core/api/hooks/index.html +49 -49
  88. package/coverage/lcov-report/core/api/hooks/index.js.html +11 -11
  89. package/coverage/lcov-report/core/api/index.html +42 -42
  90. package/coverage/lcov-report/core/api/index.js.html +22 -22
  91. package/coverage/lcov-report/core/api/marshall.js.html +127 -127
  92. package/coverage/lcov-report/core/api/models/groups.model.mongodb.js.html +1 -1
  93. package/coverage/lcov-report/core/api/models/index.html +1 -1
  94. package/coverage/lcov-report/core/api/models/messages.model.mongodb.js.html +1 -1
  95. package/coverage/lcov-report/core/api/models/organisations.model.mongodb.js.html +1 -1
  96. package/coverage/lcov-report/core/api/models/tags.model.mongodb.js.html +1 -1
  97. package/coverage/lcov-report/core/api/models/users.model.mongodb.js.html +11 -11
  98. package/coverage/lcov-report/core/api/services/account/account.hooks.js.html +42 -42
  99. package/coverage/lcov-report/core/api/services/account/account.service.js.html +34 -34
  100. package/coverage/lcov-report/core/api/services/account/index.html +1 -1
  101. package/coverage/lcov-report/core/api/services/authorisations/authorisations.hooks.js.html +34 -34
  102. package/coverage/lcov-report/core/api/services/authorisations/authorisations.service.js.html +108 -120
  103. package/coverage/lcov-report/core/api/services/authorisations/index.html +19 -19
  104. package/coverage/lcov-report/core/api/services/databases/databases.hooks.js.html +1 -1
  105. package/coverage/lcov-report/core/api/services/databases/databases.service.js.html +1 -1
  106. package/coverage/lcov-report/core/api/services/databases/index.html +1 -1
  107. package/coverage/lcov-report/core/api/services/groups/groups.hooks.js.html +1 -1
  108. package/coverage/lcov-report/core/api/services/groups/index.html +1 -1
  109. package/coverage/lcov-report/core/api/services/import-export/import-export.hooks.js.html +1 -1
  110. package/coverage/lcov-report/core/api/services/import-export/import-export.service.js.html +1 -1
  111. package/coverage/lcov-report/core/api/services/import-export/index.html +1 -1
  112. package/coverage/lcov-report/core/api/services/index.html +15 -15
  113. package/coverage/lcov-report/core/api/services/index.js.html +97 -85
  114. package/coverage/lcov-report/core/api/services/mailer/index.html +1 -1
  115. package/coverage/lcov-report/core/api/services/mailer/mailer.hooks.js.html +1 -1
  116. package/coverage/lcov-report/core/api/services/mailer/mailer.service.js.html +1 -1
  117. package/coverage/lcov-report/core/api/services/messages/index.html +5 -5
  118. package/coverage/lcov-report/core/api/services/messages/messages.hooks.js.html +11 -8
  119. package/coverage/lcov-report/core/api/services/organisations/index.html +1 -1
  120. package/coverage/lcov-report/core/api/services/organisations/organisations.hooks.js.html +1 -1
  121. package/coverage/lcov-report/core/api/services/organisations/organisations.service.js.html +1 -1
  122. package/coverage/lcov-report/core/api/services/push/index.html +1 -1
  123. package/coverage/lcov-report/core/api/services/push/push.hooks.js.html +1 -1
  124. package/coverage/lcov-report/core/api/services/push/push.service.js.html +1 -1
  125. package/coverage/lcov-report/core/api/services/storage/index.html +1 -1
  126. package/coverage/lcov-report/core/api/services/storage/storage.hooks.js.html +36 -36
  127. package/coverage/lcov-report/core/api/services/storage/storage.service.js.html +30 -30
  128. package/coverage/lcov-report/core/api/services/tags/index.html +1 -1
  129. package/coverage/lcov-report/core/api/services/tags/tags.hooks.js.html +1 -1
  130. package/coverage/lcov-report/core/api/services/users/index.html +7 -7
  131. package/coverage/lcov-report/core/api/services/users/users.hooks.js.html +83 -80
  132. package/coverage/lcov-report/core/api/services/users/users.service.js.html +4 -4
  133. package/coverage/lcov-report/core/api/utils.js.html +1 -1
  134. package/coverage/lcov-report/core/common/errors.js.html +2 -2
  135. package/coverage/lcov-report/core/common/index.html +30 -30
  136. package/coverage/lcov-report/core/common/index.js.html +11 -11
  137. package/coverage/lcov-report/core/common/permissions.js.html +187 -187
  138. package/coverage/lcov-report/core/common/schema.js.html +26 -26
  139. package/coverage/lcov-report/core/common/utils.js.html +61 -61
  140. package/coverage/lcov-report/core/common/utils.offline.js.html +6 -6
  141. package/coverage/lcov-report/index.html +179 -164
  142. package/coverage/lcov-report/map/api/hooks/hooks.catalog.js.html +348 -258
  143. package/coverage/lcov-report/map/api/hooks/hooks.features.js.html +218 -218
  144. package/coverage/lcov-report/map/api/hooks/hooks.query.js.html +795 -810
  145. package/coverage/lcov-report/map/api/hooks/index.html +54 -54
  146. package/coverage/lcov-report/map/api/hooks/index.js.html +16 -16
  147. package/coverage/lcov-report/map/api/index.html +32 -32
  148. package/coverage/lcov-report/map/api/index.js.html +46 -46
  149. package/coverage/lcov-report/map/api/marshall.js.html +72 -72
  150. package/coverage/lcov-report/map/api/models/alerts.model.mongodb.js.html +24 -24
  151. package/coverage/lcov-report/map/api/models/catalog.model.mongodb.js.html +69 -27
  152. package/coverage/lcov-report/map/api/models/features.model.mongodb.js.html +80 -80
  153. package/coverage/lcov-report/map/api/models/index.html +69 -54
  154. package/coverage/lcov-report/map/api/models/projects.model.mongodb.js.html +26 -26
  155. package/coverage/lcov-report/map/api/models/styles.model.mongodb.js.html +112 -0
  156. package/coverage/lcov-report/map/api/services/alerts/alerts.hooks.js.html +136 -136
  157. package/coverage/lcov-report/map/api/services/alerts/alerts.service.js.html +343 -343
  158. package/coverage/lcov-report/map/api/services/alerts/index.html +32 -32
  159. package/coverage/lcov-report/map/api/services/catalog/catalog.hooks.js.html +177 -162
  160. package/coverage/lcov-report/map/api/services/catalog/index.html +21 -21
  161. package/coverage/lcov-report/map/api/services/daptiles/daptiles.service.js.html +1 -1
  162. package/coverage/lcov-report/map/api/services/daptiles/index.html +1 -1
  163. package/coverage/lcov-report/map/api/services/features/features.hooks.js.html +160 -160
  164. package/coverage/lcov-report/map/api/services/features/features.service.js.html +117 -117
  165. package/coverage/lcov-report/map/api/services/features/index.html +31 -31
  166. package/coverage/lcov-report/map/api/services/index.html +21 -21
  167. package/coverage/lcov-report/map/api/services/index.js.html +404 -296
  168. package/coverage/lcov-report/map/api/services/projects/index.html +21 -21
  169. package/coverage/lcov-report/map/api/services/projects/projects.hooks.js.html +237 -237
  170. package/coverage/lcov-report/map/api/services/styles/index.html +116 -0
  171. package/coverage/lcov-report/map/api/services/styles/styles.hooks.js.html +196 -0
  172. package/coverage/lcov-report/map/common/dynamic-grid-source.js.html +68 -68
  173. package/coverage/lcov-report/map/common/errors.js.html +16 -16
  174. package/coverage/lcov-report/map/common/geotiff-grid-source.js.html +267 -267
  175. package/coverage/lcov-report/map/common/grid.js.html +554 -554
  176. package/coverage/lcov-report/map/common/index.html +158 -158
  177. package/coverage/lcov-report/map/common/index.js.html +68 -68
  178. package/coverage/lcov-report/map/common/meteo-model-grid-source.js.html +73 -73
  179. package/coverage/lcov-report/map/common/moment-utils.js.html +18 -18
  180. package/coverage/lcov-report/map/common/opendap-grid-source.js.html +484 -484
  181. package/coverage/lcov-report/map/common/opendap-utils.js.html +353 -353
  182. package/coverage/lcov-report/map/common/permissions.js.html +42 -36
  183. package/coverage/lcov-report/map/common/time-based-grid-source.js.html +59 -59
  184. package/coverage/lcov-report/map/common/tms-utils.js.html +6 -6
  185. package/coverage/lcov-report/map/common/wcs-grid-source.js.html +190 -190
  186. package/coverage/lcov-report/map/common/wcs-utils.js.html +339 -339
  187. package/coverage/lcov-report/map/common/weacast-grid-source.js.html +345 -345
  188. package/coverage/lcov-report/map/common/wfs-utils.js.html +11 -11
  189. package/coverage/lcov-report/map/common/wms-utils.js.html +8 -8
  190. package/coverage/lcov-report/map/common/wmts-utils.js.html +7 -7
  191. package/coverage/lcov.info +7022 -5894
  192. package/coverage/map/api/hooks/hooks.catalog.js.html +348 -258
  193. package/coverage/map/api/hooks/hooks.features.js.html +218 -218
  194. package/coverage/map/api/hooks/hooks.query.js.html +795 -810
  195. package/coverage/map/api/hooks/index.html +54 -54
  196. package/coverage/map/api/hooks/index.js.html +16 -16
  197. package/coverage/map/api/index.html +32 -32
  198. package/coverage/map/api/index.js.html +46 -46
  199. package/coverage/map/api/marshall.js.html +72 -72
  200. package/coverage/map/api/models/alerts.model.mongodb.js.html +24 -24
  201. package/coverage/map/api/models/catalog.model.mongodb.js.html +69 -27
  202. package/coverage/map/api/models/features.model.mongodb.js.html +80 -80
  203. package/coverage/map/api/models/index.html +69 -54
  204. package/coverage/map/api/models/projects.model.mongodb.js.html +26 -26
  205. package/coverage/map/api/models/styles.model.mongodb.js.html +112 -0
  206. package/coverage/map/api/services/alerts/alerts.hooks.js.html +136 -136
  207. package/coverage/map/api/services/alerts/alerts.service.js.html +343 -343
  208. package/coverage/map/api/services/alerts/index.html +32 -32
  209. package/coverage/map/api/services/catalog/catalog.hooks.js.html +177 -162
  210. package/coverage/map/api/services/catalog/index.html +21 -21
  211. package/coverage/map/api/services/daptiles/daptiles.service.js.html +1 -1
  212. package/coverage/map/api/services/daptiles/index.html +1 -1
  213. package/coverage/map/api/services/features/features.hooks.js.html +160 -160
  214. package/coverage/map/api/services/features/features.service.js.html +117 -117
  215. package/coverage/map/api/services/features/index.html +31 -31
  216. package/coverage/map/api/services/index.html +21 -21
  217. package/coverage/map/api/services/index.js.html +404 -296
  218. package/coverage/map/api/services/projects/index.html +21 -21
  219. package/coverage/map/api/services/projects/projects.hooks.js.html +237 -237
  220. package/coverage/map/api/services/styles/index.html +116 -0
  221. package/coverage/map/api/services/styles/styles.hooks.js.html +196 -0
  222. package/coverage/map/common/dynamic-grid-source.js.html +68 -68
  223. package/coverage/map/common/errors.js.html +16 -16
  224. package/coverage/map/common/geotiff-grid-source.js.html +267 -267
  225. package/coverage/map/common/grid.js.html +554 -554
  226. package/coverage/map/common/index.html +158 -158
  227. package/coverage/map/common/index.js.html +68 -68
  228. package/coverage/map/common/meteo-model-grid-source.js.html +73 -73
  229. package/coverage/map/common/moment-utils.js.html +18 -18
  230. package/coverage/map/common/opendap-grid-source.js.html +484 -484
  231. package/coverage/map/common/opendap-utils.js.html +353 -353
  232. package/coverage/map/common/permissions.js.html +42 -36
  233. package/coverage/map/common/time-based-grid-source.js.html +59 -59
  234. package/coverage/map/common/tms-utils.js.html +6 -6
  235. package/coverage/map/common/wcs-grid-source.js.html +190 -190
  236. package/coverage/map/common/wcs-utils.js.html +339 -339
  237. package/coverage/map/common/weacast-grid-source.js.html +345 -345
  238. package/coverage/map/common/wfs-utils.js.html +11 -11
  239. package/coverage/map/common/wms-utils.js.html +8 -8
  240. package/coverage/map/common/wmts-utils.js.html +7 -7
  241. package/coverage/tmp/coverage-151198-1753351220086-0.json +1 -0
  242. package/coverage/tmp/coverage-151210-1753351220070-0.json +1 -0
  243. package/coverage/tmp/coverage-151221-1753351129816-0.json +1 -0
  244. package/coverage/tmp/coverage-151233-1753351129803-0.json +1 -0
  245. package/coverage/tmp/coverage-151240-1753351129770-0.json +1 -0
  246. package/coverage/tmp/coverage-151307-1753351220058-0.json +1 -0
  247. package/coverage/tmp/coverage-151319-1753351220044-0.json +1 -0
  248. package/coverage/tmp/coverage-151326-1753351220010-0.json +1 -0
  249. package/map/api/services/styles/styles.hooks.js +1 -1
  250. package/map/client/components/KLayerEditor.vue +4 -0
  251. package/map/client/components/catalog/KLayerCategories.vue +2 -0
  252. package/map/client/components/stickies/KLevelSlider.vue +10 -8
  253. package/map/client/components/styles/KStyleEditor.vue +1 -1
  254. package/map/client/components/styles/KStyleManager.vue +7 -1
  255. package/map/client/composables/highlight.js +5 -1
  256. package/map/client/i18n/map_en.json +4 -1
  257. package/map/client/i18n/map_fr.json +4 -1
  258. package/map/client/mixins/globe/mixin.geojson-layers.js +11 -5
  259. package/map/client/mixins/mixin.activity.js +9 -0
  260. package/map/client/utils/utils.layers.js +0 -2
  261. package/package.json +1 -1
  262. package/test/api/core/push.test.js +1 -1
  263. package/test/api/core/test-log-2025-02-05.log +23 -0
  264. package/test/api/core/test-log-2025-05-21.log +15 -0
  265. package/test/api/core/test-log-2025-06-25.log +9 -0
  266. package/test/api/core/test-log-2025-07-24.log +44 -0
  267. package/test/api/map/test-log-2025-05-27.log +13 -0
  268. package/test/api/map/test-log-2025-06-23.log +7 -0
  269. package/test/api/map/{test-log-2025-05-26.log → test-log-2025-07-24.log} +3 -4
  270. package/coverage/tmp/coverage-122123-1739872365211-0.json +0 -1
  271. package/coverage/tmp/coverage-122135-1739872365196-0.json +0 -1
  272. package/coverage/tmp/coverage-122146-1739872365184-0.json +0 -1
  273. package/coverage/tmp/coverage-122158-1739872365169-0.json +0 -1
  274. package/coverage/tmp/coverage-122165-1739872365141-0.json +0 -1
  275. package/test/api/core/test-log-2025-05-26.log +0 -22
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">77.24% </span>
26
+ <span class="strong">97.27% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>224/290</span>
28
+ <span class='fraction'>286/294</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">59.67% </span>
33
+ <span class="strong">80.35% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>37/62</span>
35
+ <span class='fraction'>90/112</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">58.82% </span>
40
+ <span class="strong">100% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>10/17</span>
42
+ <span class='fraction'>17/17</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">77.24% </span>
47
+ <span class="strong">97.27% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>224/290</span>
49
+ <span class='fraction'>286/294</span>
50
50
  </div>
51
51
 
52
52
 
@@ -61,7 +61,7 @@
61
61
  </div>
62
62
  </template>
63
63
  </div>
64
- <div class='status-line medium'></div>
64
+ <div class='status-line high'></div>
65
65
  <pre><table class="coverage">
66
66
  <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
67
  <a name='L2'></a><a href='#L2'>2</a>
@@ -353,117 +353,84 @@
353
353
  <a name='L288'></a><a href='#L288'>288</a>
354
354
  <a name='L289'></a><a href='#L289'>289</a>
355
355
  <a name='L290'></a><a href='#L290'>290</a>
356
- <a name='L291'></a><a href='#L291'>291</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
357
- <span class="cline-any cline-yes">1x</span>
358
- <span class="cline-any cline-yes">1x</span>
359
- <span class="cline-any cline-yes">1x</span>
360
- <span class="cline-any cline-yes">1x</span>
361
- <span class="cline-any cline-yes">1x</span>
362
- <span class="cline-any cline-yes">1x</span>
363
- <span class="cline-any cline-yes">1x</span>
364
- <span class="cline-any cline-yes">1x</span>
365
- <span class="cline-any cline-yes">1x</span>
366
- <span class="cline-any cline-yes">1x</span>
367
- <span class="cline-any cline-yes">1x</span>
368
- <span class="cline-any cline-yes">1x</span>
369
- <span class="cline-any cline-yes">1x</span>
370
- <span class="cline-any cline-yes">1x</span>
371
- <span class="cline-any cline-yes">1x</span>
372
- <span class="cline-any cline-no">&nbsp;</span>
373
- <span class="cline-any cline-no">&nbsp;</span>
374
- <span class="cline-any cline-no">&nbsp;</span>
375
- <span class="cline-any cline-no">&nbsp;</span>
376
- <span class="cline-any cline-no">&nbsp;</span>
377
- <span class="cline-any cline-no">&nbsp;</span>
378
- <span class="cline-any cline-no">&nbsp;</span>
379
- <span class="cline-any cline-no">&nbsp;</span>
380
- <span class="cline-any cline-no">&nbsp;</span>
381
- <span class="cline-any cline-yes">1x</span>
382
- <span class="cline-any cline-yes">1x</span>
383
- <span class="cline-any cline-yes">1x</span>
384
- <span class="cline-any cline-no">&nbsp;</span>
385
- <span class="cline-any cline-no">&nbsp;</span>
386
- <span class="cline-any cline-no">&nbsp;</span>
387
- <span class="cline-any cline-no">&nbsp;</span>
388
- <span class="cline-any cline-no">&nbsp;</span>
389
- <span class="cline-any cline-no">&nbsp;</span>
390
- <span class="cline-any cline-no">&nbsp;</span>
391
- <span class="cline-any cline-no">&nbsp;</span>
392
- <span class="cline-any cline-no">&nbsp;</span>
393
- <span class="cline-any cline-yes">1x</span>
394
- <span class="cline-any cline-yes">1x</span>
395
- <span class="cline-any cline-yes">1x</span>
396
- <span class="cline-any cline-yes">1x</span>
397
- <span class="cline-any cline-yes">1x</span>
398
- <span class="cline-any cline-yes">1x</span>
399
- <span class="cline-any cline-yes">1x</span>
400
- <span class="cline-any cline-yes">3x</span>
401
- <span class="cline-any cline-yes">14x</span>
402
- <span class="cline-any cline-yes">14x</span>
403
- <span class="cline-any cline-yes">14x</span>
404
- <span class="cline-any cline-yes">14x</span>
405
- <span class="cline-any cline-yes">14x</span>
406
- <span class="cline-any cline-yes">14x</span>
407
- <span class="cline-any cline-yes">14x</span>
408
- <span class="cline-any cline-yes">21x</span>
409
- <span class="cline-any cline-yes">21x</span>
410
- <span class="cline-any cline-yes">20x</span>
411
- <span class="cline-any cline-yes">20x</span>
412
- <span class="cline-any cline-yes">20x</span>
413
- <span class="cline-any cline-yes">7x</span>
414
- <span class="cline-any cline-yes">7x</span>
415
- <span class="cline-any cline-yes">21x</span>
416
- <span class="cline-any cline-no">&nbsp;</span>
417
- <span class="cline-any cline-no">&nbsp;</span>
418
- <span class="cline-any cline-yes">14x</span>
419
- <span class="cline-any cline-yes">14x</span>
420
- <span class="cline-any cline-yes">14x</span>
421
- <span class="cline-any cline-yes">14x</span>
422
- <span class="cline-any cline-yes">14x</span>
423
- <span class="cline-any cline-yes">3x</span>
424
- <span class="cline-any cline-yes">1x</span>
425
- <span class="cline-any cline-yes">1x</span>
426
- <span class="cline-any cline-yes">1x</span>
427
- <span class="cline-any cline-yes">1x</span>
428
- <span class="cline-any cline-yes">1x</span>
429
- <span class="cline-any cline-yes">1x</span>
430
- <span class="cline-any cline-yes">1x</span>
431
- <span class="cline-any cline-yes">1x</span>
432
- <span class="cline-any cline-yes">1x</span>
433
- <span class="cline-any cline-yes">1x</span>
434
- <span class="cline-any cline-yes">1x</span>
435
- <span class="cline-any cline-yes">1x</span>
436
- <span class="cline-any cline-yes">1x</span>
437
- <span class="cline-any cline-yes">1x</span>
438
- <span class="cline-any cline-yes">1x</span>
439
- <span class="cline-any cline-yes">1x</span>
440
- <span class="cline-any cline-yes">1x</span>
441
- <span class="cline-any cline-yes">1x</span>
442
- <span class="cline-any cline-yes">1x</span>
443
- <span class="cline-any cline-yes">1x</span>
444
- <span class="cline-any cline-yes">1x</span>
445
- <span class="cline-any cline-yes">1x</span>
446
- <span class="cline-any cline-yes">1x</span>
447
- <span class="cline-any cline-yes">1x</span>
448
- <span class="cline-any cline-yes">1x</span>
449
- <span class="cline-any cline-yes">1x</span>
450
- <span class="cline-any cline-yes">1x</span>
451
- <span class="cline-any cline-yes">1x</span>
452
- <span class="cline-any cline-yes">1x</span>
453
- <span class="cline-any cline-yes">1x</span>
454
- <span class="cline-any cline-yes">1x</span>
455
- <span class="cline-any cline-yes">1x</span>
456
- <span class="cline-any cline-yes">1x</span>
457
- <span class="cline-any cline-yes">1x</span>
458
- <span class="cline-any cline-yes">1x</span>
459
- <span class="cline-any cline-yes">1x</span>
460
- <span class="cline-any cline-yes">1x</span>
461
- <span class="cline-any cline-yes">1x</span>
462
- <span class="cline-any cline-yes">1x</span>
463
- <span class="cline-any cline-yes">1x</span>
464
- <span class="cline-any cline-yes">1x</span>
465
- <span class="cline-any cline-yes">1x</span>
466
- <span class="cline-any cline-yes">1x</span>
356
+ <a name='L291'></a><a href='#L291'>291</a>
357
+ <a name='L292'></a><a href='#L292'>292</a>
358
+ <a name='L293'></a><a href='#L293'>293</a>
359
+ <a name='L294'></a><a href='#L294'>294</a>
360
+ <a name='L295'></a><a href='#L295'>295</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">2x</span>
361
+ <span class="cline-any cline-yes">2x</span>
362
+ <span class="cline-any cline-yes">2x</span>
363
+ <span class="cline-any cline-yes">2x</span>
364
+ <span class="cline-any cline-yes">2x</span>
365
+ <span class="cline-any cline-yes">2x</span>
366
+ <span class="cline-any cline-yes">2x</span>
367
+ <span class="cline-any cline-yes">2x</span>
368
+ <span class="cline-any cline-yes">2x</span>
369
+ <span class="cline-any cline-yes">2x</span>
370
+ <span class="cline-any cline-yes">2x</span>
371
+ <span class="cline-any cline-yes">2x</span>
372
+ <span class="cline-any cline-yes">2x</span>
373
+ <span class="cline-any cline-yes">2x</span>
374
+ <span class="cline-any cline-yes">2x</span>
375
+ <span class="cline-any cline-yes">2x</span>
376
+ <span class="cline-any cline-yes">5x</span>
377
+ <span class="cline-any cline-yes">29x</span>
378
+ <span class="cline-any cline-yes">29x</span>
379
+ <span class="cline-any cline-yes">29x</span>
380
+ <span class="cline-any cline-yes">29x</span>
381
+ <span class="cline-any cline-yes">29x</span>
382
+ <span class="cline-any cline-yes">29x</span>
383
+ <span class="cline-any cline-yes">29x</span>
384
+ <span class="cline-any cline-yes">5x</span>
385
+ <span class="cline-any cline-yes">2x</span>
386
+ <span class="cline-any cline-yes">2x</span>
387
+ <span class="cline-any cline-yes">2x</span>
388
+ <span class="cline-any cline-yes">9x</span>
389
+ <span class="cline-any cline-yes">86x</span>
390
+ <span class="cline-any cline-yes">86x</span>
391
+ <span class="cline-any cline-yes">86x</span>
392
+ <span class="cline-any cline-yes">86x</span>
393
+ <span class="cline-any cline-yes">86x</span>
394
+ <span class="cline-any cline-yes">86x</span>
395
+ <span class="cline-any cline-yes">86x</span>
396
+ <span class="cline-any cline-yes">9x</span>
397
+ <span class="cline-any cline-yes">2x</span>
398
+ <span class="cline-any cline-yes">2x</span>
399
+ <span class="cline-any cline-yes">2x</span>
400
+ <span class="cline-any cline-yes">2x</span>
401
+ <span class="cline-any cline-yes">2x</span>
402
+ <span class="cline-any cline-yes">2x</span>
403
+ <span class="cline-any cline-yes">2x</span>
404
+ <span class="cline-any cline-yes">5x</span>
405
+ <span class="cline-any cline-yes">18x</span>
406
+ <span class="cline-any cline-yes">18x</span>
407
+ <span class="cline-any cline-yes">18x</span>
408
+ <span class="cline-any cline-yes">18x</span>
409
+ <span class="cline-any cline-yes">18x</span>
410
+ <span class="cline-any cline-yes">18x</span>
411
+ <span class="cline-any cline-yes">18x</span>
412
+ <span class="cline-any cline-yes">27x</span>
413
+ <span class="cline-any cline-yes">27x</span>
414
+ <span class="cline-any cline-yes">24x</span>
415
+ <span class="cline-any cline-yes">24x</span>
416
+ <span class="cline-any cline-yes">24x</span>
417
+ <span class="cline-any cline-yes">9x</span>
418
+ <span class="cline-any cline-yes">9x</span>
419
+ <span class="cline-any cline-yes">27x</span>
420
+ <span class="cline-any cline-no">&nbsp;</span>
421
+ <span class="cline-any cline-no">&nbsp;</span>
422
+ <span class="cline-any cline-yes">18x</span>
423
+ <span class="cline-any cline-yes">18x</span>
424
+ <span class="cline-any cline-yes">18x</span>
425
+ <span class="cline-any cline-yes">18x</span>
426
+ <span class="cline-any cline-yes">18x</span>
427
+ <span class="cline-any cline-yes">5x</span>
428
+ <span class="cline-any cline-yes">2x</span>
429
+ <span class="cline-any cline-yes">2x</span>
430
+ <span class="cline-any cline-yes">2x</span>
431
+ <span class="cline-any cline-yes">2x</span>
432
+ <span class="cline-any cline-yes">2x</span>
433
+ <span class="cline-any cline-yes">2x</span>
467
434
  <span class="cline-any cline-yes">1x</span>
468
435
  <span class="cline-any cline-yes">1x</span>
469
436
  <span class="cline-any cline-yes">1x</span>
@@ -474,6 +441,25 @@
474
441
  <span class="cline-any cline-yes">1x</span>
475
442
  <span class="cline-any cline-yes">1x</span>
476
443
  <span class="cline-any cline-yes">1x</span>
444
+ <span class="cline-any cline-yes">2x</span>
445
+ <span class="cline-any cline-yes">2x</span>
446
+ <span class="cline-any cline-yes">2x</span>
447
+ <span class="cline-any cline-yes">2x</span>
448
+ <span class="cline-any cline-yes">6x</span>
449
+ <span class="cline-any cline-yes">121x</span>
450
+ <span class="cline-any cline-yes">121x</span>
451
+ <span class="cline-any cline-yes">121x</span>
452
+ <span class="cline-any cline-yes">121x</span>
453
+ <span class="cline-any cline-yes">121x</span>
454
+ <span class="cline-any cline-yes">121x</span>
455
+ <span class="cline-any cline-yes">121x</span>
456
+ <span class="cline-any cline-yes">121x</span>
457
+ <span class="cline-any cline-yes">121x</span>
458
+ <span class="cline-any cline-yes">121x</span>
459
+ <span class="cline-any cline-yes">6x</span>
460
+ <span class="cline-any cline-yes">2x</span>
461
+ <span class="cline-any cline-yes">2x</span>
462
+ <span class="cline-any cline-yes">2x</span>
477
463
  <span class="cline-any cline-yes">1x</span>
478
464
  <span class="cline-any cline-yes">1x</span>
479
465
  <span class="cline-any cline-yes">1x</span>
@@ -488,66 +474,82 @@
488
474
  <span class="cline-any cline-yes">1x</span>
489
475
  <span class="cline-any cline-yes">1x</span>
490
476
  <span class="cline-any cline-yes">1x</span>
491
- <span class="cline-any cline-no">&nbsp;</span>
492
- <span class="cline-any cline-no">&nbsp;</span>
493
- <span class="cline-any cline-no">&nbsp;</span>
494
- <span class="cline-any cline-no">&nbsp;</span>
495
- <span class="cline-any cline-no">&nbsp;</span>
496
- <span class="cline-any cline-no">&nbsp;</span>
497
- <span class="cline-any cline-no">&nbsp;</span>
498
- <span class="cline-any cline-no">&nbsp;</span>
477
+ <span class="cline-any cline-yes">2x</span>
478
+ <span class="cline-any cline-yes">2x</span>
479
+ <span class="cline-any cline-yes">2x</span>
480
+ <span class="cline-any cline-yes">2x</span>
499
481
  <span class="cline-any cline-yes">1x</span>
500
482
  <span class="cline-any cline-yes">1x</span>
501
483
  <span class="cline-any cline-yes">1x</span>
502
- <span class="cline-any cline-no">&nbsp;</span>
503
- <span class="cline-any cline-no">&nbsp;</span>
504
- <span class="cline-any cline-no">&nbsp;</span>
505
- <span class="cline-any cline-no">&nbsp;</span>
506
- <span class="cline-any cline-no">&nbsp;</span>
507
- <span class="cline-any cline-no">&nbsp;</span>
508
- <span class="cline-any cline-no">&nbsp;</span>
509
- <span class="cline-any cline-no">&nbsp;</span>
510
- <span class="cline-any cline-no">&nbsp;</span>
511
- <span class="cline-any cline-no">&nbsp;</span>
512
484
  <span class="cline-any cline-yes">1x</span>
513
485
  <span class="cline-any cline-yes">1x</span>
514
486
  <span class="cline-any cline-yes">1x</span>
515
- <span class="cline-any cline-no">&nbsp;</span>
516
- <span class="cline-any cline-no">&nbsp;</span>
517
- <span class="cline-any cline-no">&nbsp;</span>
518
- <span class="cline-any cline-no">&nbsp;</span>
519
- <span class="cline-any cline-no">&nbsp;</span>
520
487
  <span class="cline-any cline-yes">1x</span>
521
488
  <span class="cline-any cline-yes">1x</span>
522
489
  <span class="cline-any cline-yes">1x</span>
523
- <span class="cline-any cline-no">&nbsp;</span>
524
- <span class="cline-any cline-no">&nbsp;</span>
525
- <span class="cline-any cline-no">&nbsp;</span>
526
- <span class="cline-any cline-no">&nbsp;</span>
527
- <span class="cline-any cline-no">&nbsp;</span>
528
- <span class="cline-any cline-no">&nbsp;</span>
529
- <span class="cline-any cline-no">&nbsp;</span>
530
- <span class="cline-any cline-no">&nbsp;</span>
531
- <span class="cline-any cline-no">&nbsp;</span>
532
- <span class="cline-any cline-no">&nbsp;</span>
533
490
  <span class="cline-any cline-yes">1x</span>
534
491
  <span class="cline-any cline-yes">1x</span>
535
- <span class="cline-any cline-yes">3x</span>
492
+ <span class="cline-any cline-yes">2x</span>
493
+ <span class="cline-any cline-yes">2x</span>
494
+ <span class="cline-any cline-yes">2x</span>
495
+ <span class="cline-any cline-yes">100x</span>
496
+ <span class="cline-any cline-yes">164x</span>
497
+ <span class="cline-any cline-yes">164x</span>
498
+ <span class="cline-any cline-yes">36x</span>
499
+ <span class="cline-any cline-yes">36x</span>
500
+ <span class="cline-any cline-yes">36x</span>
501
+ <span class="cline-any cline-yes">100x</span>
502
+ <span class="cline-any cline-yes">100x</span>
503
+ <span class="cline-any cline-yes">2x</span>
504
+ <span class="cline-any cline-yes">2x</span>
505
+ <span class="cline-any cline-yes">2x</span>
506
+ <span class="cline-any cline-yes">6x</span>
507
+ <span class="cline-any cline-yes">104x</span>
508
+ <span class="cline-any cline-yes">104x</span>
509
+ <span class="cline-any cline-yes">104x</span>
510
+ <span class="cline-any cline-yes">104x</span>
511
+ <span class="cline-any cline-yes">104x</span>
512
+ <span class="cline-any cline-yes">104x</span>
513
+ <span class="cline-any cline-yes">104x</span>
514
+ <span class="cline-any cline-yes">104x</span>
515
+ <span class="cline-any cline-yes">6x</span>
516
+ <span class="cline-any cline-yes">2x</span>
517
+ <span class="cline-any cline-yes">2x</span>
518
+ <span class="cline-any cline-yes">2x</span>
519
+ <span class="cline-any cline-yes">39x</span>
520
+ <span class="cline-any cline-yes">58x</span>
521
+ <span class="cline-any cline-yes">58x</span>
522
+ <span class="cline-any cline-yes">39x</span>
523
+ <span class="cline-any cline-yes">39x</span>
524
+ <span class="cline-any cline-yes">2x</span>
525
+ <span class="cline-any cline-yes">2x</span>
526
+ <span class="cline-any cline-yes">2x</span>
527
+ <span class="cline-any cline-yes">5x</span>
528
+ <span class="cline-any cline-yes">33x</span>
529
+ <span class="cline-any cline-yes">33x</span>
530
+ <span class="cline-any cline-yes">33x</span>
531
+ <span class="cline-any cline-yes">33x</span>
532
+ <span class="cline-any cline-yes">33x</span>
533
+ <span class="cline-any cline-yes">33x</span>
534
+ <span class="cline-any cline-yes">33x</span>
535
+ <span class="cline-any cline-yes">33x</span>
536
+ <span class="cline-any cline-yes">5x</span>
537
+ <span class="cline-any cline-yes">2x</span>
538
+ <span class="cline-any cline-yes">2x</span>
539
+ <span class="cline-any cline-yes">20x</span>
536
540
  <span class="cline-any cline-no">&nbsp;</span>
537
541
  <span class="cline-any cline-no">&nbsp;</span>
538
- <span class="cline-any cline-yes">3x</span>
539
- <span class="cline-any cline-yes">3x</span>
540
- <span class="cline-any cline-yes">3x</span>
541
- <span class="cline-any cline-yes">3x</span>
542
- <span class="cline-any cline-yes">3x</span>
543
- <span class="cline-any cline-yes">3x</span>
544
- <span class="cline-any cline-yes">3x</span>
545
- <span class="cline-any cline-yes">3x</span>
546
- <span class="cline-any cline-yes">3x</span>
547
- <span class="cline-any cline-yes">1x</span>
548
- <span class="cline-any cline-yes">1x</span>
549
- <span class="cline-any cline-yes">1x</span>
550
- <span class="cline-any cline-yes">1x</span>
542
+ <span class="cline-any cline-yes">20x</span>
543
+ <span class="cline-any cline-yes">20x</span>
544
+ <span class="cline-any cline-yes">20x</span>
545
+ <span class="cline-any cline-yes">20x</span>
546
+ <span class="cline-any cline-yes">19x</span>
547
+ <span class="cline-any cline-yes">19x</span>
548
+ <span class="cline-any cline-yes">19x</span>
549
+ <span class="cline-any cline-yes">20x</span>
550
+ <span class="cline-any cline-yes">20x</span>
551
+ <span class="cline-any cline-yes">2x</span>
552
+ <span class="cline-any cline-yes">2x</span>
551
553
  <span class="cline-any cline-yes">1x</span>
552
554
  <span class="cline-any cline-yes">1x</span>
553
555
  <span class="cline-any cline-yes">1x</span>
@@ -559,6 +561,8 @@
559
561
  <span class="cline-any cline-yes">1x</span>
560
562
  <span class="cline-any cline-yes">1x</span>
561
563
  <span class="cline-any cline-yes">2x</span>
564
+ <span class="cline-any cline-yes">2x</span>
565
+ <span class="cline-any cline-yes">2x</span>
562
566
  <span class="cline-any cline-yes">1x</span>
563
567
  <span class="cline-any cline-no">&nbsp;</span>
564
568
  <span class="cline-any cline-no">&nbsp;</span>
@@ -574,52 +578,56 @@
574
578
  <span class="cline-any cline-yes">1x</span>
575
579
  <span class="cline-any cline-yes">1x</span>
576
580
  <span class="cline-any cline-yes">2x</span>
581
+ <span class="cline-any cline-yes">2x</span>
582
+ <span class="cline-any cline-yes">2x</span>
583
+ <span class="cline-any cline-yes">2x</span>
584
+ <span class="cline-any cline-yes">55x</span>
585
+ <span class="cline-any cline-yes">55x</span>
586
+ <span class="cline-any cline-yes">55x</span>
577
587
  <span class="cline-any cline-yes">1x</span>
578
588
  <span class="cline-any cline-yes">1x</span>
579
589
  <span class="cline-any cline-yes">1x</span>
580
- <span class="cline-any cline-no">&nbsp;</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-yes">1x</span>
588
- <span class="cline-any cline-yes">1x</span>
589
- <span class="cline-any cline-yes">1x</span>
590
+ <span class="cline-any cline-yes">55x</span>
591
+ <span class="cline-any cline-yes">2x</span>
592
+ <span class="cline-any cline-yes">2x</span>
593
+ <span class="cline-any cline-yes">2x</span>
594
+ <span class="cline-any cline-yes">10x</span>
595
+ <span class="cline-any cline-yes">20x</span>
596
+ <span class="cline-any cline-yes">16x</span>
597
+ <span class="cline-any cline-yes">16x</span>
598
+ <span class="cline-any cline-yes">16x</span>
599
+ <span class="cline-any cline-yes">20x</span>
600
+ <span class="cline-any cline-yes">20x</span>
601
+ <span class="cline-any cline-yes">20x</span>
602
+ <span class="cline-any cline-yes">20x</span>
603
+ <span class="cline-any cline-yes">20x</span>
604
+ <span class="cline-any cline-yes">11x</span>
605
+ <span class="cline-any cline-yes">11x</span>
606
+ <span class="cline-any cline-yes">11x</span>
607
+ <span class="cline-any cline-yes">11x</span>
608
+ <span class="cline-any cline-yes">11x</span>
609
+ <span class="cline-any cline-yes">11x</span>
610
+ <span class="cline-any cline-yes">11x</span>
611
+ <span class="cline-any cline-yes">4x</span>
590
612
  <span class="cline-any cline-yes">4x</span>
591
613
  <span class="cline-any cline-yes">4x</span>
592
614
  <span class="cline-any cline-yes">4x</span>
593
615
  <span class="cline-any cline-yes">4x</span>
594
616
  <span class="cline-any cline-yes">4x</span>
595
617
  <span class="cline-any cline-yes">4x</span>
596
- <span class="cline-any cline-yes">2x</span>
597
- <span class="cline-any cline-yes">2x</span>
598
- <span class="cline-any cline-yes">2x</span>
599
- <span class="cline-any cline-yes">2x</span>
600
- <span class="cline-any cline-yes">2x</span>
601
- <span class="cline-any cline-yes">2x</span>
602
- <span class="cline-any cline-yes">2x</span>
603
- <span class="cline-any cline-yes">2x</span>
604
- <span class="cline-any cline-yes">2x</span>
605
- <span class="cline-any cline-yes">2x</span>
606
- <span class="cline-any cline-yes">2x</span>
607
- <span class="cline-any cline-yes">2x</span>
608
- <span class="cline-any cline-yes">2x</span>
609
- <span class="cline-any cline-yes">2x</span>
610
618
  <span class="cline-any cline-yes">1x</span>
619
+ <span class="cline-any cline-yes">4x</span>
620
+ <span class="cline-any cline-yes">4x</span>
621
+ <span class="cline-any cline-yes">4x</span>
622
+ <span class="cline-any cline-yes">11x</span>
623
+ <span class="cline-any cline-yes">16x</span>
624
+ <span class="cline-any cline-yes">20x</span>
625
+ <span class="cline-any cline-yes">10x</span>
611
626
  <span class="cline-any cline-yes">2x</span>
612
627
  <span class="cline-any cline-yes">2x</span>
613
628
  <span class="cline-any cline-yes">2x</span>
614
629
  <span class="cline-any cline-yes">2x</span>
615
630
  <span class="cline-any cline-yes">2x</span>
616
- <span class="cline-any cline-yes">4x</span>
617
- <span class="cline-any cline-yes">4x</span>
618
- <span class="cline-any cline-yes">1x</span>
619
- <span class="cline-any cline-yes">1x</span>
620
- <span class="cline-any cline-yes">1x</span>
621
- <span class="cline-any cline-yes">1x</span>
622
- <span class="cline-any cline-yes">1x</span>
623
631
  <span class="cline-any cline-yes">3x</span>
624
632
  <span class="cline-any cline-yes">3x</span>
625
633
  <span class="cline-any cline-no">&nbsp;</span>
@@ -658,28 +666,28 @@ const sift = siftModule.default
658
666
  const debug = makeDebug('kdk:core:model:hooks')
659
667
  &nbsp;
660
668
  // Need to convert from server side types (moment dates) to basic JS types when "writing" to DB adapters
661
- export <span class="fstat-no" title="function not covered" >function processTimes (properties) {</span>
662
- <span class="cstat-no" title="statement not covered" > return function (hook) {</span>
663
- <span class="cstat-no" title="statement not covered" > let items = getItems(hook)</span>
664
- <span class="cstat-no" title="statement not covered" > const isArray = Array.isArray(items)</span>
665
- <span class="cstat-no" title="statement not covered" > items = (isArray ? items : [items])</span>
666
- <span class="cstat-no" title="statement not covered" > items.forEach(item =&gt; marshallTimes(item, properties))</span>
667
- <span class="cstat-no" title="statement not covered" > replaceItems(hook, isArray ? items : items[0])</span>
668
- <span class="cstat-no" title="statement not covered" > return hook</span>
669
- <span class="cstat-no" title="statement not covered" > }</span>
670
- <span class="cstat-no" title="statement not covered" >}</span>
669
+ export function processTimes (properties) {
670
+ return function (hook) {
671
+ let items = getItems(hook)
672
+ const isArray = Array.isArray(items)
673
+ items = (isArray ? items : [items])
674
+ items.forEach(item =&gt; marshallTimes(item, properties))
675
+ replaceItems(hook, isArray ? items : items[0])
676
+ return hook
677
+ }
678
+ }
671
679
  &nbsp;
672
680
  // Need to convert back to server side types (moment dates) from basic JS types when "reading" from DB adapters
673
- export <span class="fstat-no" title="function not covered" >function unprocessTimes (properties) {</span>
674
- <span class="cstat-no" title="statement not covered" > return function (hook) {</span>
675
- <span class="cstat-no" title="statement not covered" > let items = getItems(hook)</span>
676
- <span class="cstat-no" title="statement not covered" > const isArray = Array.isArray(items)</span>
677
- <span class="cstat-no" title="statement not covered" > items = (isArray ? items : [items])</span>
678
- <span class="cstat-no" title="statement not covered" > items.forEach(item =&gt; unmarshallTimes(item, properties))</span>
679
- <span class="cstat-no" title="statement not covered" > replaceItems(hook, isArray ? items : items[0])</span>
680
- <span class="cstat-no" title="statement not covered" > return hook</span>
681
- <span class="cstat-no" title="statement not covered" > }</span>
682
- <span class="cstat-no" title="statement not covered" >}</span>
681
+ export function unprocessTimes (properties) {
682
+ return function (hook) {
683
+ let items = getItems(hook)
684
+ const isArray = Array.isArray(items)
685
+ items = (isArray ? items : [items])
686
+ items.forEach(item =&gt; unmarshallTimes(item, properties))
687
+ replaceItems(hook, isArray ? items : items[0])
688
+ return hook
689
+ }
690
+ }
683
691
  &nbsp;
684
692
  // The hook serialize allows to copy/move some properties within the objects holded by the hook
685
693
  // It applies an array of rules defined by:
@@ -734,9 +742,9 @@ export function convertObjectIDs (properties) {
734
742
  return function (hook) {
735
743
  let items = getItems(hook)
736
744
  const isArray = Array.isArray(items)
737
- items = (isArray <span class="branch-0 cbranch-no" title="branch not covered" >? items </span>: [items])
745
+ items = (isArray ? items : [items])
738
746
  items.forEach(item =&gt; toObjectIDs(item, properties))
739
- replaceItems(hook, isArray <span class="branch-0 cbranch-no" title="branch not covered" >? items </span>: items[0])
747
+ replaceItems(hook, isArray ? items : items[0])
740
748
  &nbsp;
741
749
  if (hook.params.query) toObjectIDs(hook.params.query, properties)
742
750
  &nbsp;
@@ -777,56 +785,56 @@ export function convertDates (properties, asMoment) {
777
785
  }
778
786
  &nbsp;
779
787
  // Utility function used to convert from string to JSON a fixed set of properties on a given object
780
- export <span class="fstat-no" title="function not covered" >function toJson (object, properties) {</span>
781
- <span class="cstat-no" title="statement not covered" > properties.forEach(property =&gt; {</span>
782
- <span class="cstat-no" title="statement not covered" > const string = _.get(object, property)</span>
783
- <span class="cstat-no" title="statement not covered" > if (string &amp;&amp; (typeof string === 'string')) {</span>
784
- <span class="cstat-no" title="statement not covered" > const json = JSON.parse(string)</span>
785
- <span class="cstat-no" title="statement not covered" > _.set(object, property, json)</span>
786
- <span class="cstat-no" title="statement not covered" > }</span>
787
- <span class="cstat-no" title="statement not covered" > })</span>
788
- <span class="cstat-no" title="statement not covered" >}</span>
788
+ export function toJson (object, properties) {
789
+ properties.forEach(property =&gt; {
790
+ const string = _.get(object, property)
791
+ if (string &amp;&amp; (typeof string === 'string')) {
792
+ const json = JSON.parse(string)
793
+ _.set(object, property, json)
794
+ }
795
+ })
796
+ }
789
797
  &nbsp;
790
798
  // The hook allows to transform a set of input properties as strings into JSON objects
791
- export <span class="fstat-no" title="function not covered" >function convertToJson (properties) {</span>
792
- <span class="cstat-no" title="statement not covered" > return function (hook) {</span>
793
- <span class="cstat-no" title="statement not covered" > let items = getItems(hook)</span>
794
- <span class="cstat-no" title="statement not covered" > const isArray = Array.isArray(items)</span>
795
- <span class="cstat-no" title="statement not covered" > items = (isArray ? items : [items])</span>
796
- <span class="cstat-no" title="statement not covered" > items.forEach(item =&gt; toJson(item, properties))</span>
797
- <span class="cstat-no" title="statement not covered" > replaceItems(hook, isArray ? items : items[0])</span>
798
- <span class="cstat-no" title="statement not covered" ></span>
799
- <span class="cstat-no" title="statement not covered" > return hook</span>
800
- <span class="cstat-no" title="statement not covered" > }</span>
801
- <span class="cstat-no" title="statement not covered" >}</span>
799
+ export function convertToJson (properties) {
800
+ return function (hook) {
801
+ let items = getItems(hook)
802
+ const isArray = Array.isArray(items)
803
+ items = (isArray ? items : [items])
804
+ items.forEach(item =&gt; toJson(item, properties))
805
+ replaceItems(hook, isArray ? items : items[0])
806
+ &nbsp;
807
+ return hook
808
+ }
809
+ }
802
810
  &nbsp;
803
811
  // Utility function used to convert from string to JSON a fixed set of properties on a given object
804
- export <span class="fstat-no" title="function not covered" >function toString (object, properties) {</span>
805
- <span class="cstat-no" title="statement not covered" > properties.forEach(property =&gt; {</span>
806
- <span class="cstat-no" title="statement not covered" > const json = _.get(object, property)</span>
807
- <span class="cstat-no" title="statement not covered" > if (json &amp;&amp; (typeof json === 'object')) _.set(object, property, JSON.stringify(json))</span>
808
- <span class="cstat-no" title="statement not covered" > })</span>
809
- <span class="cstat-no" title="statement not covered" >}</span>
812
+ export function toString (object, properties) {
813
+ properties.forEach(property =&gt; {
814
+ const json = _.get(object, property)
815
+ if (json &amp;&amp; (typeof json === 'object')) _.set(object, property, JSON.stringify(json))
816
+ })
817
+ }
810
818
  &nbsp;
811
819
  // The hook allows to transform a set of input properties from JSON objects into strings
812
- export <span class="fstat-no" title="function not covered" >function convertToString (properties) {</span>
813
- <span class="cstat-no" title="statement not covered" > return function (hook) {</span>
814
- <span class="cstat-no" title="statement not covered" > let items = getItems(hook)</span>
815
- <span class="cstat-no" title="statement not covered" > const isArray = Array.isArray(items)</span>
816
- <span class="cstat-no" title="statement not covered" > items = (isArray ? items : [items])</span>
817
- <span class="cstat-no" title="statement not covered" > items.forEach(item =&gt; toString(item, properties))</span>
818
- <span class="cstat-no" title="statement not covered" > replaceItems(hook, isArray ? items : items[0])</span>
819
- <span class="cstat-no" title="statement not covered" ></span>
820
- <span class="cstat-no" title="statement not covered" > return hook</span>
821
- <span class="cstat-no" title="statement not covered" > }</span>
822
- <span class="cstat-no" title="statement not covered" >}</span>
820
+ export function convertToString (properties) {
821
+ return function (hook) {
822
+ let items = getItems(hook)
823
+ const isArray = Array.isArray(items)
824
+ items = (isArray ? items : [items])
825
+ items.forEach(item =&gt; toString(item, properties))
826
+ replaceItems(hook, isArray ? items : items[0])
827
+ &nbsp;
828
+ return hook
829
+ }
830
+ }
823
831
  &nbsp;
824
832
  export async function populatePreviousObject (hook) {
825
833
  if (hook.type !== 'before') <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
826
834
  <span class="cstat-no" title="statement not covered" > throw new Error('The \'populatePreviousObject\' hook should only be used as a \'before\' hook.')</span>
827
835
  <span class="cstat-no" title="statement not covered" > }</span>
828
836
  const item = getItems(hook)
829
- const id = (hook.id ? hook.id <span class="branch-0 cbranch-no" title="branch not covered" >: _.get(item, '_id'))</span>
837
+ const id = (hook.id ? hook.id : _.get(item, '_id'))
830
838
  // Retrieve previous version of the item and make it available to next hooks
831
839
  if (id) {
832
840
  hook.params.previousItem = await hook.service.get(id.toString())
@@ -866,18 +874,22 @@ export function setExpireAfter (delayInSeconds) {
866
874
  }
867
875
  &nbsp;
868
876
  // Allow to use the distinct function of MongoDB
869
- export <span class="fstat-no" title="function not covered" >async function distinct (hook) {</span>
870
- <span class="cstat-no" title="statement not covered" > const params = hook.params</span>
871
- <span class="cstat-no" title="statement not covered" > const query = params.query</span>
872
- <span class="cstat-no" title="statement not covered" > if (!query || !query.$distinct) return hook</span>
873
- <span class="cstat-no" title="statement not covered" > const collection = hook.service.Model</span>
874
- <span class="cstat-no" title="statement not covered" > hook.result = await collection.distinct(query.$distinct, _.omit(query, ['$distinct']))</span>
875
- <span class="cstat-no" title="statement not covered" > return hook</span>
876
- <span class="cstat-no" title="statement not covered" >}</span>
877
+ export async function distinct (hook) {
878
+ const params = hook.params
879
+ const query = params.query
880
+ if (!query || !query.$distinct) return hook
881
+ const collection = hook.service.Model
882
+ hook.result = await collection.distinct(query.$distinct, _.omit(query, ['$distinct']))
883
+ return hook
884
+ }
877
885
  &nbsp;
878
886
  // Check for already existing object according to given service/id field
879
887
  export function checkUnique (options = {}) {
880
888
  return async (hook) =&gt; {
889
+ if (hook.app) {
890
+ const serviceConfig = hook.app.get(hook.service.name)
891
+ if (serviceConfig &amp;&amp; serviceConfig.checkUnique) <span class="branch-0 cbranch-no" title="branch not covered" >options = serviceConfig.checkUnique</span>
892
+ }
881
893
  const service = (options.service <span class="branch-0 cbranch-no" title="branch not covered" >? hook.app.getService(options.service) </span>: hook.service)
882
894
  const field = options.field <span class="branch-0 cbranch-no" title="branch not covered" >|| 'name'</span>
883
895
  const id = _.get(hook, `data.${field}`)
@@ -885,7 +897,7 @@ export function checkUnique (options = {}) {
885
897
  if (id) {
886
898
  const query = { [options.field]: id }
887
899
  // Apply processing if required
888
- if (typeof options.query === 'function') <span class="branch-0 cbranch-no" title="branch not covered" >options.query(query, hook)</span>
900
+ if (typeof options.query === 'function') options.query(query, hook)
889
901
  const result = await service.find({ query })
890
902
  // Pagination on/off ?
891
903
  const total = (Array.isArray(result) <span class="branch-0 cbranch-no" title="branch not covered" >? result.length </span>: result.total)
@@ -940,7 +952,7 @@ export function preventChanges (ifThrow, fieldNames) {
940
952
  <div class='footer quiet pad2 space-top1 center small'>
941
953
  Code coverage generated by
942
954
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
943
- at 2025-02-18T09:52:45.605Z
955
+ at 2025-07-24T10:00:20.476Z
944
956
  </div>
945
957
  <script src="../../../prettify.js"></script>
946
958
  <script>