@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">77.37% </span>
26
+ <span class="strong">0% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>188/243</span>
28
+ <span class='fraction'>0/236</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">60.53% </span>
33
+ <span class="strong">0% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>69/114</span>
35
+ <span class='fraction'>0/114</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">95.52% </span>
40
+ <span class="strong">0% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>64/67</span>
42
+ <span class='fraction'>0/65</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">78.32% </span>
47
+ <span class="strong">0% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>177/226</span>
49
+ <span class='fraction'>0/219</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>
@@ -478,46 +478,46 @@
478
478
  <a name='L419'></a><a href='#L419'>419</a>
479
479
  <a name='L420'></a><a href='#L420'>420</a>
480
480
  <a name='L421'></a><a href='#L421'>421</a>
481
- <a name='L422'></a><a href='#L422'>422</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
482
- <span class="cline-any cline-yes">1x</span>
483
- <span class="cline-any cline-yes">1x</span>
484
- <span class="cline-any cline-yes">1x</span>
485
- <span class="cline-any cline-yes">1x</span>
481
+ <a name='L422'></a><a href='#L422'>422</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
486
482
  <span class="cline-any cline-neutral">&nbsp;</span>
487
- <span class="cline-any cline-yes">1x</span>
488
- <span class="cline-any cline-yes">1x</span>
489
483
  <span class="cline-any cline-neutral">&nbsp;</span>
490
484
  <span class="cline-any cline-neutral">&nbsp;</span>
491
- <span class="cline-any cline-yes">5x</span>
492
485
  <span class="cline-any cline-neutral">&nbsp;</span>
493
- <span class="cline-any cline-yes">2x</span>
486
+ <span class="cline-any cline-neutral">&nbsp;</span>
487
+ <span class="cline-any cline-no">&nbsp;</span>
494
488
  <span class="cline-any cline-no">&nbsp;</span>
495
489
  <span class="cline-any cline-neutral">&nbsp;</span>
496
490
  <span class="cline-any cline-neutral">&nbsp;</span>
497
- <span class="cline-any cline-yes">5x</span>
498
- <span class="cline-any cline-yes">5x</span>
499
- <span class="cline-any cline-yes">10x</span>
491
+ <span class="cline-any cline-no">&nbsp;</span>
500
492
  <span class="cline-any cline-neutral">&nbsp;</span>
493
+ <span class="cline-any cline-no">&nbsp;</span>
494
+ <span class="cline-any cline-no">&nbsp;</span>
501
495
  <span class="cline-any cline-neutral">&nbsp;</span>
502
496
  <span class="cline-any cline-neutral">&nbsp;</span>
503
- <span class="cline-any cline-yes">10x</span>
504
- <span class="cline-any cline-yes">10x</span>
505
- <span class="cline-any cline-yes">10x</span>
497
+ <span class="cline-any cline-no">&nbsp;</span>
498
+ <span class="cline-any cline-no">&nbsp;</span>
499
+ <span class="cline-any cline-no">&nbsp;</span>
506
500
  <span class="cline-any cline-neutral">&nbsp;</span>
507
- <span class="cline-any cline-yes">5x</span>
508
501
  <span class="cline-any cline-neutral">&nbsp;</span>
509
502
  <span class="cline-any cline-neutral">&nbsp;</span>
510
- <span class="cline-any cline-yes">18x</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>
511
506
  <span class="cline-any cline-neutral">&nbsp;</span>
507
+ <span class="cline-any cline-no">&nbsp;</span>
512
508
  <span class="cline-any cline-neutral">&nbsp;</span>
513
509
  <span class="cline-any cline-neutral">&nbsp;</span>
514
- <span class="cline-any cline-yes">4x</span>
515
- <span class="cline-any cline-yes">4x</span>
510
+ <span class="cline-any cline-no">&nbsp;</span>
516
511
  <span class="cline-any cline-neutral">&nbsp;</span>
517
- <span class="cline-any cline-yes">4x</span>
518
512
  <span class="cline-any cline-neutral">&nbsp;</span>
519
- <span class="cline-any cline-yes">4x</span>
520
- <span class="cline-any cline-yes">4x</span>
513
+ <span class="cline-any cline-neutral">&nbsp;</span>
514
+ <span class="cline-any cline-no">&nbsp;</span>
515
+ <span class="cline-any cline-no">&nbsp;</span>
516
+ <span class="cline-any cline-neutral">&nbsp;</span>
517
+ <span class="cline-any cline-no">&nbsp;</span>
518
+ <span class="cline-any cline-neutral">&nbsp;</span>
519
+ <span class="cline-any cline-no">&nbsp;</span>
520
+ <span class="cline-any cline-no">&nbsp;</span>
521
521
  <span class="cline-any cline-neutral">&nbsp;</span>
522
522
  <span class="cline-any cline-no">&nbsp;</span>
523
523
  <span class="cline-any cline-no">&nbsp;</span>
@@ -528,12 +528,12 @@
528
528
  <span class="cline-any cline-no">&nbsp;</span>
529
529
  <span class="cline-any cline-neutral">&nbsp;</span>
530
530
  <span class="cline-any cline-neutral">&nbsp;</span>
531
- <span class="cline-any cline-yes">4x</span>
532
- <span class="cline-any cline-yes">1x</span>
533
- <span class="cline-any cline-yes">3x</span>
534
531
  <span class="cline-any cline-no">&nbsp;</span>
535
532
  <span class="cline-any cline-no">&nbsp;</span>
536
- <span class="cline-any cline-yes">3x</span>
533
+ <span class="cline-any cline-no">&nbsp;</span>
534
+ <span class="cline-any cline-no">&nbsp;</span>
535
+ <span class="cline-any cline-no">&nbsp;</span>
536
+ <span class="cline-any cline-no">&nbsp;</span>
537
537
  <span class="cline-any cline-neutral">&nbsp;</span>
538
538
  <span class="cline-any cline-no">&nbsp;</span>
539
539
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -543,82 +543,82 @@
543
543
  <span class="cline-any cline-no">&nbsp;</span>
544
544
  <span class="cline-any cline-neutral">&nbsp;</span>
545
545
  <span class="cline-any cline-neutral">&nbsp;</span>
546
- <span class="cline-any cline-yes">3x</span>
546
+ <span class="cline-any cline-no">&nbsp;</span>
547
547
  <span class="cline-any cline-neutral">&nbsp;</span>
548
548
  <span class="cline-any cline-neutral">&nbsp;</span>
549
549
  <span class="cline-any cline-neutral">&nbsp;</span>
550
- <span class="cline-any cline-yes">3x</span>
551
- <span class="cline-any cline-yes">3x</span>
552
- <span class="cline-any cline-yes">3x</span>
553
- <span class="cline-any cline-yes">3x</span>
550
+ <span class="cline-any cline-no">&nbsp;</span>
551
+ <span class="cline-any cline-no">&nbsp;</span>
552
+ <span class="cline-any cline-no">&nbsp;</span>
553
+ <span class="cline-any cline-no">&nbsp;</span>
554
554
  <span class="cline-any cline-neutral">&nbsp;</span>
555
- <span class="cline-any cline-yes">4x</span>
555
+ <span class="cline-any cline-no">&nbsp;</span>
556
556
  <span class="cline-any cline-neutral">&nbsp;</span>
557
557
  <span class="cline-any cline-neutral">&nbsp;</span>
558
- <span class="cline-any cline-yes">14x</span>
559
- <span class="cline-any cline-yes">14x</span>
560
- <span class="cline-any cline-yes">1x</span>
558
+ <span class="cline-any cline-no">&nbsp;</span>
559
+ <span class="cline-any cline-no">&nbsp;</span>
560
+ <span class="cline-any cline-no">&nbsp;</span>
561
561
  <span class="cline-any cline-neutral">&nbsp;</span>
562
562
  <span class="cline-any cline-no">&nbsp;</span>
563
563
  <span class="cline-any cline-neutral">&nbsp;</span>
564
564
  <span class="cline-any cline-neutral">&nbsp;</span>
565
- <span class="cline-any cline-yes">1x</span>
565
+ <span class="cline-any cline-no">&nbsp;</span>
566
566
  <span class="cline-any cline-neutral">&nbsp;</span>
567
567
  <span class="cline-any cline-no">&nbsp;</span>
568
568
  <span class="cline-any cline-neutral">&nbsp;</span>
569
569
  <span class="cline-any cline-neutral">&nbsp;</span>
570
570
  <span class="cline-any cline-neutral">&nbsp;</span>
571
- <span class="cline-any cline-yes">14x</span>
571
+ <span class="cline-any cline-no">&nbsp;</span>
572
572
  <span class="cline-any cline-neutral">&nbsp;</span>
573
573
  <span class="cline-any cline-neutral">&nbsp;</span>
574
- <span class="cline-any cline-yes">3x</span>
575
- <span class="cline-any cline-yes">3x</span>
576
- <span class="cline-any cline-yes">3x</span>
574
+ <span class="cline-any cline-no">&nbsp;</span>
575
+ <span class="cline-any cline-no">&nbsp;</span>
576
+ <span class="cline-any cline-no">&nbsp;</span>
577
577
  <span class="cline-any cline-no">&nbsp;</span>
578
578
  <span class="cline-any cline-no">&nbsp;</span>
579
579
  <span class="cline-any cline-neutral">&nbsp;</span>
580
580
  <span class="cline-any cline-neutral">&nbsp;</span>
581
- <span class="cline-any cline-yes">3x</span>
582
- <span class="cline-any cline-yes">3x</span>
583
- <span class="cline-any cline-yes">3x</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
584
  <span class="cline-any cline-no">&nbsp;</span>
585
585
  <span class="cline-any cline-no">&nbsp;</span>
586
586
  <span class="cline-any cline-no">&nbsp;</span>
587
587
  <span class="cline-any cline-neutral">&nbsp;</span>
588
- <span class="cline-any cline-yes">3x</span>
589
- <span class="cline-any cline-yes">3x</span>
588
+ <span class="cline-any cline-no">&nbsp;</span>
589
+ <span class="cline-any cline-no">&nbsp;</span>
590
590
  <span class="cline-any cline-neutral">&nbsp;</span>
591
- <span class="cline-any cline-yes">3x</span>
592
- <span class="cline-any cline-yes">3x</span>
591
+ <span class="cline-any cline-no">&nbsp;</span>
592
+ <span class="cline-any cline-no">&nbsp;</span>
593
593
  <span class="cline-any cline-neutral">&nbsp;</span>
594
594
  <span class="cline-any cline-neutral">&nbsp;</span>
595
595
  <span class="cline-any cline-neutral">&nbsp;</span>
596
596
  <span class="cline-any cline-neutral">&nbsp;</span>
597
597
  <span class="cline-any cline-neutral">&nbsp;</span>
598
- <span class="cline-any cline-yes">2x</span>
598
+ <span class="cline-any cline-no">&nbsp;</span>
599
599
  <span class="cline-any cline-neutral">&nbsp;</span>
600
- <span class="cline-any cline-yes">2x</span>
601
- <span class="cline-any cline-yes">3x</span>
602
- <span class="cline-any cline-yes">2x</span>
600
+ <span class="cline-any cline-no">&nbsp;</span>
601
+ <span class="cline-any cline-no">&nbsp;</span>
602
+ <span class="cline-any cline-no">&nbsp;</span>
603
603
  <span class="cline-any cline-no">&nbsp;</span>
604
604
  <span class="cline-any cline-no">&nbsp;</span>
605
605
  <span class="cline-any cline-neutral">&nbsp;</span>
606
- <span class="cline-any cline-yes">2x</span>
607
- <span class="cline-any cline-yes">2x</span>
606
+ <span class="cline-any cline-no">&nbsp;</span>
607
+ <span class="cline-any cline-no">&nbsp;</span>
608
608
  <span class="cline-any cline-no">&nbsp;</span>
609
609
  <span class="cline-any cline-no">&nbsp;</span>
610
610
  <span class="cline-any cline-neutral">&nbsp;</span>
611
611
  <span class="cline-any cline-neutral">&nbsp;</span>
612
- <span class="cline-any cline-yes">2x</span>
613
- <span class="cline-any cline-yes">2x</span>
614
- <span class="cline-any cline-yes">1x</span>
612
+ <span class="cline-any cline-no">&nbsp;</span>
613
+ <span class="cline-any cline-no">&nbsp;</span>
614
+ <span class="cline-any cline-no">&nbsp;</span>
615
615
  <span class="cline-any cline-neutral">&nbsp;</span>
616
- <span class="cline-any cline-yes">1x</span>
617
- <span class="cline-any cline-yes">1x</span>
618
- <span class="cline-any cline-yes">1x</span>
616
+ <span class="cline-any cline-no">&nbsp;</span>
617
+ <span class="cline-any cline-no">&nbsp;</span>
618
+ <span class="cline-any cline-no">&nbsp;</span>
619
619
  <span class="cline-any cline-neutral">&nbsp;</span>
620
- <span class="cline-any cline-yes">1x</span>
621
- <span class="cline-any cline-yes">1x</span>
620
+ <span class="cline-any cline-no">&nbsp;</span>
621
+ <span class="cline-any cline-no">&nbsp;</span>
622
622
  <span class="cline-any cline-neutral">&nbsp;</span>
623
623
  <span class="cline-any cline-neutral">&nbsp;</span>
624
624
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -628,112 +628,112 @@
628
628
  <span class="cline-any cline-neutral">&nbsp;</span>
629
629
  <span class="cline-any cline-neutral">&nbsp;</span>
630
630
  <span class="cline-any cline-neutral">&nbsp;</span>
631
- <span class="cline-any cline-yes">2x</span>
631
+ <span class="cline-any cline-no">&nbsp;</span>
632
632
  <span class="cline-any cline-neutral">&nbsp;</span>
633
- <span class="cline-any cline-yes">2x</span>
634
- <span class="cline-any cline-yes">3x</span>
635
- <span class="cline-any cline-yes">2x</span>
633
+ <span class="cline-any cline-no">&nbsp;</span>
634
+ <span class="cline-any cline-no">&nbsp;</span>
635
+ <span class="cline-any cline-no">&nbsp;</span>
636
636
  <span class="cline-any cline-no">&nbsp;</span>
637
637
  <span class="cline-any cline-no">&nbsp;</span>
638
638
  <span class="cline-any cline-no">&nbsp;</span>
639
639
  <span class="cline-any cline-neutral">&nbsp;</span>
640
- <span class="cline-any cline-yes">2x</span>
641
- <span class="cline-any cline-yes">2x</span>
640
+ <span class="cline-any cline-no">&nbsp;</span>
641
+ <span class="cline-any cline-no">&nbsp;</span>
642
642
  <span class="cline-any cline-no">&nbsp;</span>
643
643
  <span class="cline-any cline-no">&nbsp;</span>
644
644
  <span class="cline-any cline-neutral">&nbsp;</span>
645
- <span class="cline-any cline-yes">2x</span>
646
- <span class="cline-any cline-yes">2x</span>
645
+ <span class="cline-any cline-no">&nbsp;</span>
646
+ <span class="cline-any cline-no">&nbsp;</span>
647
647
  <span class="cline-any cline-neutral">&nbsp;</span>
648
- <span class="cline-any cline-yes">2x</span>
649
- <span class="cline-any cline-yes">2x</span>
648
+ <span class="cline-any cline-no">&nbsp;</span>
649
+ <span class="cline-any cline-no">&nbsp;</span>
650
650
  <span class="cline-any cline-neutral">&nbsp;</span>
651
651
  <span class="cline-any cline-neutral">&nbsp;</span>
652
652
  <span class="cline-any cline-neutral">&nbsp;</span>
653
653
  <span class="cline-any cline-neutral">&nbsp;</span>
654
654
  <span class="cline-any cline-neutral">&nbsp;</span>
655
655
  <span class="cline-any cline-neutral">&nbsp;</span>
656
- <span class="cline-any cline-yes">1x</span>
657
- <span class="cline-any cline-yes">1x</span>
658
- <span class="cline-any cline-yes">1x</span>
659
- <span class="cline-any cline-yes">2x</span>
660
- <span class="cline-any cline-yes">2x</span>
661
- <span class="cline-any cline-yes">2x</span>
656
+ <span class="cline-any cline-no">&nbsp;</span>
657
+ <span class="cline-any cline-no">&nbsp;</span>
658
+ <span class="cline-any cline-no">&nbsp;</span>
659
+ <span class="cline-any cline-no">&nbsp;</span>
660
+ <span class="cline-any cline-no">&nbsp;</span>
661
+ <span class="cline-any cline-no">&nbsp;</span>
662
662
  <span class="cline-any cline-no">&nbsp;</span>
663
663
  <span class="cline-any cline-no">&nbsp;</span>
664
664
  <span class="cline-any cline-neutral">&nbsp;</span>
665
- <span class="cline-any cline-yes">2x</span>
666
- <span class="cline-any cline-yes">2x</span>
667
- <span class="cline-any cline-yes">2x</span>
665
+ <span class="cline-any cline-no">&nbsp;</span>
666
+ <span class="cline-any cline-no">&nbsp;</span>
667
+ <span class="cline-any cline-no">&nbsp;</span>
668
668
  <span class="cline-any cline-neutral">&nbsp;</span>
669
669
  <span class="cline-any cline-neutral">&nbsp;</span>
670
670
  <span class="cline-any cline-no">&nbsp;</span>
671
671
  <span class="cline-any cline-no">&nbsp;</span>
672
672
  <span class="cline-any cline-neutral">&nbsp;</span>
673
- <span class="cline-any cline-yes">2x</span>
674
- <span class="cline-any cline-yes">2x</span>
673
+ <span class="cline-any cline-no">&nbsp;</span>
674
+ <span class="cline-any cline-no">&nbsp;</span>
675
675
  <span class="cline-any cline-neutral">&nbsp;</span>
676
676
  <span class="cline-any cline-neutral">&nbsp;</span>
677
677
  <span class="cline-any cline-neutral">&nbsp;</span>
678
678
  <span class="cline-any cline-neutral">&nbsp;</span>
679
- <span class="cline-any cline-yes">1x</span>
680
- <span class="cline-any cline-yes">2x</span>
679
+ <span class="cline-any cline-no">&nbsp;</span>
680
+ <span class="cline-any cline-no">&nbsp;</span>
681
681
  <span class="cline-any cline-neutral">&nbsp;</span>
682
- <span class="cline-any cline-yes">1x</span>
683
682
  <span class="cline-any cline-neutral">&nbsp;</span>
684
- <span class="cline-any cline-yes">1x</span>
685
- <span class="cline-any cline-yes">1x</span>
686
- <span class="cline-any cline-yes">2x</span>
687
683
  <span class="cline-any cline-neutral">&nbsp;</span>
688
- <span class="cline-any cline-yes">2x</span>
689
- <span class="cline-any cline-yes">2x</span>
684
+ <span class="cline-any cline-no">&nbsp;</span>
685
+ <span class="cline-any cline-no">&nbsp;</span>
690
686
  <span class="cline-any cline-no">&nbsp;</span>
691
687
  <span class="cline-any cline-neutral">&nbsp;</span>
692
- <span class="cline-any cline-yes">2x</span>
693
- <span class="cline-any cline-yes">2x</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-neutral">&nbsp;</span>
692
+ <span class="cline-any cline-no">&nbsp;</span>
693
+ <span class="cline-any cline-no">&nbsp;</span>
694
694
  <span class="cline-any cline-neutral">&nbsp;</span>
695
695
  <span class="cline-any cline-neutral">&nbsp;</span>
696
696
  <span class="cline-any cline-neutral">&nbsp;</span>
697
697
  <span class="cline-any cline-neutral">&nbsp;</span>
698
- <span class="cline-any cline-yes">1x</span>
699
- <span class="cline-any cline-yes">2x</span>
700
- <span class="cline-any cline-yes">1x</span>
701
- <span class="cline-any cline-yes">1x</span>
698
+ <span class="cline-any cline-no">&nbsp;</span>
699
+ <span class="cline-any cline-no">&nbsp;</span>
700
+ <span class="cline-any cline-no">&nbsp;</span>
701
+ <span class="cline-any cline-no">&nbsp;</span>
702
702
  <span class="cline-any cline-neutral">&nbsp;</span>
703
703
  <span class="cline-any cline-no">&nbsp;</span>
704
704
  <span class="cline-any cline-neutral">&nbsp;</span>
705
705
  <span class="cline-any cline-neutral">&nbsp;</span>
706
706
  <span class="cline-any cline-neutral">&nbsp;</span>
707
707
  <span class="cline-any cline-neutral">&nbsp;</span>
708
- <span class="cline-any cline-yes">1x</span>
709
- <span class="cline-any cline-yes">1x</span>
710
- <span class="cline-any cline-yes">2x</span>
711
- <span class="cline-any cline-yes">2x</span>
712
- <span class="cline-any cline-yes">2x</span>
713
- <span class="cline-any cline-yes">2x</span>
714
- <span class="cline-any cline-yes">2x</span>
708
+ <span class="cline-any cline-no">&nbsp;</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>
715
+ <span class="cline-any cline-no">&nbsp;</span>
716
+ <span class="cline-any cline-neutral">&nbsp;</span>
717
+ <span class="cline-any cline-no">&nbsp;</span>
715
718
  <span class="cline-any cline-no">&nbsp;</span>
716
719
  <span class="cline-any cline-neutral">&nbsp;</span>
717
- <span class="cline-any cline-yes">2x</span>
718
- <span class="cline-any cline-yes">2x</span>
719
720
  <span class="cline-any cline-neutral">&nbsp;</span>
720
721
  <span class="cline-any cline-neutral">&nbsp;</span>
721
722
  <span class="cline-any cline-neutral">&nbsp;</span>
723
+ <span class="cline-any cline-no">&nbsp;</span>
724
+ <span class="cline-any cline-no">&nbsp;</span>
722
725
  <span class="cline-any cline-neutral">&nbsp;</span>
723
- <span class="cline-any cline-yes">1x</span>
724
- <span class="cline-any cline-yes">2x</span>
725
726
  <span class="cline-any cline-neutral">&nbsp;</span>
726
- <span class="cline-any cline-yes">2x</span>
727
727
  <span class="cline-any cline-neutral">&nbsp;</span>
728
728
  <span class="cline-any cline-neutral">&nbsp;</span>
729
- <span class="cline-any cline-yes">1x</span>
729
+ <span class="cline-any cline-no">&nbsp;</span>
730
730
  <span class="cline-any cline-neutral">&nbsp;</span>
731
- <span class="cline-any cline-yes">1x</span>
732
- <span class="cline-any cline-yes">1x</span>
733
- <span class="cline-any cline-yes">1x</span>
734
- <span class="cline-any cline-yes">2x</span>
731
+ <span class="cline-any cline-no">&nbsp;</span>
732
+ <span class="cline-any cline-no">&nbsp;</span>
733
+ <span class="cline-any cline-no">&nbsp;</span>
734
+ <span class="cline-any cline-no">&nbsp;</span>
735
735
  <span class="cline-any cline-neutral">&nbsp;</span>
736
- <span class="cline-any cline-yes">2x</span>
736
+ <span class="cline-any cline-no">&nbsp;</span>
737
737
  <span class="cline-any cline-no">&nbsp;</span>
738
738
  <span class="cline-any cline-no">&nbsp;</span>
739
739
  <span class="cline-any cline-no">&nbsp;</span>
@@ -746,46 +746,46 @@
746
746
  <span class="cline-any cline-neutral">&nbsp;</span>
747
747
  <span class="cline-any cline-neutral">&nbsp;</span>
748
748
  <span class="cline-any cline-neutral">&nbsp;</span>
749
- <span class="cline-any cline-yes">2x</span>
750
- <span class="cline-any cline-yes">2x</span>
751
- <span class="cline-any cline-yes">2x</span>
749
+ <span class="cline-any cline-no">&nbsp;</span>
750
+ <span class="cline-any cline-no">&nbsp;</span>
751
+ <span class="cline-any cline-no">&nbsp;</span>
752
752
  <span class="cline-any cline-no">&nbsp;</span>
753
753
  <span class="cline-any cline-neutral">&nbsp;</span>
754
- <span class="cline-any cline-yes">2x</span>
755
- <span class="cline-any cline-yes">2x</span>
754
+ <span class="cline-any cline-no">&nbsp;</span>
755
+ <span class="cline-any cline-no">&nbsp;</span>
756
756
  <span class="cline-any cline-neutral">&nbsp;</span>
757
757
  <span class="cline-any cline-neutral">&nbsp;</span>
758
758
  <span class="cline-any cline-neutral">&nbsp;</span>
759
759
  <span class="cline-any cline-neutral">&nbsp;</span>
760
- <span class="cline-any cline-yes">1x</span>
761
- <span class="cline-any cline-yes">1x</span>
762
- <span class="cline-any cline-yes">1x</span>
763
- <span class="cline-any cline-yes">1x</span>
760
+ <span class="cline-any cline-no">&nbsp;</span>
761
+ <span class="cline-any cline-no">&nbsp;</span>
762
+ <span class="cline-any cline-no">&nbsp;</span>
763
+ <span class="cline-any cline-no">&nbsp;</span>
764
764
  <span class="cline-any cline-neutral">&nbsp;</span>
765
765
  <span class="cline-any cline-no">&nbsp;</span>
766
766
  <span class="cline-any cline-neutral">&nbsp;</span>
767
767
  <span class="cline-any cline-neutral">&nbsp;</span>
768
768
  <span class="cline-any cline-neutral">&nbsp;</span>
769
769
  <span class="cline-any cline-neutral">&nbsp;</span>
770
- <span class="cline-any cline-yes">1x</span>
771
- <span class="cline-any cline-yes">1x</span>
770
+ <span class="cline-any cline-no">&nbsp;</span>
771
+ <span class="cline-any cline-no">&nbsp;</span>
772
772
  <span class="cline-any cline-neutral">&nbsp;</span>
773
- <span class="cline-any cline-yes">2x</span>
774
- <span class="cline-any cline-yes">2x</span>
773
+ <span class="cline-any cline-no">&nbsp;</span>
774
+ <span class="cline-any cline-no">&nbsp;</span>
775
775
  <span class="cline-any cline-neutral">&nbsp;</span>
776
- <span class="cline-any cline-yes">2x</span>
777
- <span class="cline-any cline-yes">4x</span>
778
- <span class="cline-any cline-yes">2x</span>
779
- <span class="cline-any cline-yes">2x</span>
780
- <span class="cline-any cline-yes">2x</span>
781
- <span class="cline-any cline-yes">2x</span>
776
+ <span class="cline-any cline-no">&nbsp;</span>
777
+ <span class="cline-any cline-no">&nbsp;</span>
778
+ <span class="cline-any cline-no">&nbsp;</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
782
  <span class="cline-any cline-neutral">&nbsp;</span>
783
783
  <span class="cline-any cline-neutral">&nbsp;</span>
784
784
  <span class="cline-any cline-no">&nbsp;</span>
785
785
  <span class="cline-any cline-no">&nbsp;</span>
786
786
  <span class="cline-any cline-neutral">&nbsp;</span>
787
- <span class="cline-any cline-yes">2x</span>
788
- <span class="cline-any cline-yes">2x</span>
787
+ <span class="cline-any cline-no">&nbsp;</span>
788
+ <span class="cline-any cline-no">&nbsp;</span>
789
789
  <span class="cline-any cline-neutral">&nbsp;</span>
790
790
  <span class="cline-any cline-neutral">&nbsp;</span>
791
791
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -793,54 +793,54 @@
793
793
  <span class="cline-any cline-neutral">&nbsp;</span>
794
794
  <span class="cline-any cline-neutral">&nbsp;</span>
795
795
  <span class="cline-any cline-neutral">&nbsp;</span>
796
- <span class="cline-any cline-yes">1x</span>
796
+ <span class="cline-any cline-no">&nbsp;</span>
797
797
  <span class="cline-any cline-neutral">&nbsp;</span>
798
798
  <span class="cline-any cline-neutral">&nbsp;</span>
799
- <span class="cline-any cline-yes">2x</span>
800
- <span class="cline-any cline-yes">2x</span>
801
- <span class="cline-any cline-yes">4x</span>
802
- <span class="cline-any cline-yes">4x</span>
803
- <span class="cline-any cline-yes">4x</span>
804
- <span class="cline-any cline-yes">4x</span>
799
+ <span class="cline-any cline-no">&nbsp;</span>
800
+ <span class="cline-any cline-no">&nbsp;</span>
801
+ <span class="cline-any cline-no">&nbsp;</span>
802
+ <span class="cline-any cline-no">&nbsp;</span>
803
+ <span class="cline-any cline-no">&nbsp;</span>
804
+ <span class="cline-any cline-no">&nbsp;</span>
805
805
  <span class="cline-any cline-neutral">&nbsp;</span>
806
806
  <span class="cline-any cline-neutral">&nbsp;</span>
807
807
  <span class="cline-any cline-no">&nbsp;</span>
808
808
  <span class="cline-any cline-no">&nbsp;</span>
809
809
  <span class="cline-any cline-neutral">&nbsp;</span>
810
- <span class="cline-any cline-yes">4x</span>
811
- <span class="cline-any cline-yes">4x</span>
810
+ <span class="cline-any cline-no">&nbsp;</span>
811
+ <span class="cline-any cline-no">&nbsp;</span>
812
812
  <span class="cline-any cline-neutral">&nbsp;</span>
813
813
  <span class="cline-any cline-neutral">&nbsp;</span>
814
814
  <span class="cline-any cline-neutral">&nbsp;</span>
815
815
  <span class="cline-any cline-neutral">&nbsp;</span>
816
- <span class="cline-any cline-yes">2x</span>
816
+ <span class="cline-any cline-no">&nbsp;</span>
817
817
  <span class="cline-any cline-neutral">&nbsp;</span>
818
818
  <span class="cline-any cline-neutral">&nbsp;</span>
819
819
  <span class="cline-any cline-neutral">&nbsp;</span>
820
820
  <span class="cline-any cline-neutral">&nbsp;</span>
821
- <span class="cline-any cline-yes">1x</span>
821
+ <span class="cline-any cline-no">&nbsp;</span>
822
822
  <span class="cline-any cline-neutral">&nbsp;</span>
823
- <span class="cline-any cline-yes">1x</span>
823
+ <span class="cline-any cline-no">&nbsp;</span>
824
824
  <span class="cline-any cline-neutral">&nbsp;</span>
825
- <span class="cline-any cline-yes">1x</span>
825
+ <span class="cline-any cline-no">&nbsp;</span>
826
826
  <span class="cline-any cline-neutral">&nbsp;</span>
827
- <span class="cline-any cline-yes">2x</span>
828
- <span class="cline-any cline-yes">4x</span>
829
- <span class="cline-any cline-yes">4x</span>
830
- <span class="cline-any cline-yes">4x</span>
831
- <span class="cline-any cline-yes">8x</span>
832
- <span class="cline-any cline-yes">4x</span>
833
- <span class="cline-any cline-yes">4x</span>
834
- <span class="cline-any cline-yes">4x</span>
835
- <span class="cline-any cline-yes">4x</span>
836
- <span class="cline-any cline-yes">4x</span>
827
+ <span class="cline-any cline-no">&nbsp;</span>
828
+ <span class="cline-any cline-no">&nbsp;</span>
829
+ <span class="cline-any cline-no">&nbsp;</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>
833
+ <span class="cline-any cline-no">&nbsp;</span>
834
+ <span class="cline-any cline-no">&nbsp;</span>
835
+ <span class="cline-any cline-no">&nbsp;</span>
836
+ <span class="cline-any cline-no">&nbsp;</span>
837
837
  <span class="cline-any cline-neutral">&nbsp;</span>
838
838
  <span class="cline-any cline-neutral">&nbsp;</span>
839
839
  <span class="cline-any cline-no">&nbsp;</span>
840
840
  <span class="cline-any cline-no">&nbsp;</span>
841
841
  <span class="cline-any cline-neutral">&nbsp;</span>
842
- <span class="cline-any cline-yes">4x</span>
843
- <span class="cline-any cline-yes">4x</span>
842
+ <span class="cline-any cline-no">&nbsp;</span>
843
+ <span class="cline-any cline-no">&nbsp;</span>
844
844
  <span class="cline-any cline-neutral">&nbsp;</span>
845
845
  <span class="cline-any cline-neutral">&nbsp;</span>
846
846
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -849,25 +849,25 @@
849
849
  <span class="cline-any cline-neutral">&nbsp;</span>
850
850
  <span class="cline-any cline-neutral">&nbsp;</span>
851
851
  <span class="cline-any cline-neutral">&nbsp;</span>
852
- <span class="cline-any cline-yes">1x</span>
852
+ <span class="cline-any cline-no">&nbsp;</span>
853
853
  <span class="cline-any cline-neutral">&nbsp;</span>
854
854
  <span class="cline-any cline-neutral">&nbsp;</span>
855
855
  <span class="cline-any cline-neutral">&nbsp;</span>
856
856
  <span class="cline-any cline-neutral">&nbsp;</span>
857
- <span class="cline-any cline-yes">7x</span>
857
+ <span class="cline-any cline-no">&nbsp;</span>
858
858
  <span class="cline-any cline-neutral">&nbsp;</span>
859
- <span class="cline-any cline-yes">7x</span>
859
+ <span class="cline-any cline-no">&nbsp;</span>
860
860
  <span class="cline-any cline-neutral">&nbsp;</span>
861
861
  <span class="cline-any cline-neutral">&nbsp;</span>
862
- <span class="cline-any cline-yes">3x</span>
862
+ <span class="cline-any cline-no">&nbsp;</span>
863
863
  <span class="cline-any cline-neutral">&nbsp;</span>
864
- <span class="cline-any cline-yes">1x</span>
864
+ <span class="cline-any cline-no">&nbsp;</span>
865
865
  <span class="cline-any cline-neutral">&nbsp;</span>
866
- <span class="cline-any cline-yes">1x</span>
866
+ <span class="cline-any cline-no">&nbsp;</span>
867
867
  <span class="cline-any cline-neutral">&nbsp;</span>
868
- <span class="cline-any cline-yes">2x</span>
868
+ <span class="cline-any cline-no">&nbsp;</span>
869
869
  <span class="cline-any cline-neutral">&nbsp;</span>
870
- <span class="cline-any cline-yes">2x</span>
870
+ <span class="cline-any cline-no">&nbsp;</span>
871
871
  <span class="cline-any cline-neutral">&nbsp;</span>
872
872
  <span class="cline-any cline-neutral">&nbsp;</span>
873
873
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -875,26 +875,26 @@
875
875
  <span class="cline-any cline-neutral">&nbsp;</span>
876
876
  <span class="cline-any cline-neutral">&nbsp;</span>
877
877
  <span class="cline-any cline-neutral">&nbsp;</span>
878
- <span class="cline-any cline-yes">2x</span>
878
+ <span class="cline-any cline-no">&nbsp;</span>
879
879
  <span class="cline-any cline-neutral">&nbsp;</span>
880
- <span class="cline-any cline-yes">2x</span>
880
+ <span class="cline-any cline-no">&nbsp;</span>
881
881
  <span class="cline-any cline-neutral">&nbsp;</span>
882
- <span class="cline-any cline-yes">2x</span>
882
+ <span class="cline-any cline-no">&nbsp;</span>
883
883
  <span class="cline-any cline-neutral">&nbsp;</span>
884
884
  <span class="cline-any cline-neutral">&nbsp;</span>
885
885
  <span class="cline-any cline-neutral">&nbsp;</span>
886
886
  <span class="cline-any cline-neutral">&nbsp;</span>
887
- <span class="cline-any cline-yes">4x</span>
888
- <span class="cline-any cline-yes">4x</span>
887
+ <span class="cline-any cline-no">&nbsp;</span>
888
+ <span class="cline-any cline-no">&nbsp;</span>
889
889
  <span class="cline-any cline-neutral">&nbsp;</span>
890
- <span class="cline-any cline-yes">4x</span>
890
+ <span class="cline-any cline-no">&nbsp;</span>
891
891
  <span class="cline-any cline-neutral">&nbsp;</span>
892
892
  <span class="cline-any cline-neutral">&nbsp;</span>
893
- <span class="cline-any cline-yes">2x</span>
893
+ <span class="cline-any cline-no">&nbsp;</span>
894
894
  <span class="cline-any cline-neutral">&nbsp;</span>
895
- <span class="cline-any cline-yes">1x</span>
895
+ <span class="cline-any cline-no">&nbsp;</span>
896
896
  <span class="cline-any cline-neutral">&nbsp;</span>
897
- <span class="cline-any cline-yes">1x</span>
897
+ <span class="cline-any cline-no">&nbsp;</span>
898
898
  <span class="cline-any cline-neutral">&nbsp;</span>
899
899
  <span class="cline-any cline-neutral">&nbsp;</span>
900
900
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -905,308 +905,308 @@ import { GeneralError } from '@feathersjs/errors'
905
905
  import SNS from 'sns-mobile'
906
906
  import makeDebug from 'debug'
907
907
  &nbsp;
908
- const debug = makeDebug('kdk:core:pusher:service')
909
- const defaultTopicField = 'topics'
908
+ const debug = <span class="cstat-no" title="statement not covered" >makeDebug('kdk:core:pusher:service')</span>
909
+ const defaultTopicField = <span class="cstat-no" title="statement not covered" >'topics'</span>
910
910
  &nbsp;
911
- export default function (name, app, options) {
912
- const config = app.get('pusher')
913
- function generateTopicName (object, application) {
914
- <span class="missing-if-branch" title="else path not taken" >E</span>if (config.topicName &amp;&amp; (typeof config.topicName === 'function')) return config.topicName(object, application)
915
- else <span class="cstat-no" title="statement not covered" >return o</span>bject._id.toString()
911
+ export default <span class="fstat-no" title="function not covered" >fu</span>nction (name, app, options) {
912
+ const config = <span class="cstat-no" title="statement not covered" >app.get('pusher')</span>
913
+ function <span class="fstat-no" title="function not covered" >generateTopicName </span>(object, application) {
914
+ <span class="cstat-no" title="statement not covered" > if (config.topicName &amp;&amp; (typeof config.topicName === 'function')) <span class="cstat-no" title="statement not covered" >return config.topicName(object, application)</span></span>
915
+ else <span class="cstat-no" title="statement not covered" >return object._id.toString()</span>
916
916
  }
917
917
  // Instanciate a SNS interface for each platform found in config
918
- const snsApplications = []
919
- _.forOwn(config.platforms, (platformArn, platform) =&gt; {
920
- const snsConfig = Object.assign({
918
+ const snsApplications = <span class="cstat-no" title="statement not covered" >[]</span>
919
+ <span class="cstat-no" title="statement not covered" > _.forOwn(config.platforms, <span class="fstat-no" title="function not covered" >(p</span>latformArn, platform) =&gt; {</span>
920
+ const snsConfig = <span class="cstat-no" title="statement not covered" >Object.assign({</span>
921
921
  platform,
922
922
  platformApplicationArn: platformArn
923
923
  }, _.omit(config, ['platforms']))
924
- const snsApplication = new SNS(snsConfig)
925
- debug('SNS application created with config ', snsConfig)
926
- snsApplications.push(snsApplication)
924
+ const snsApplication = <span class="cstat-no" title="statement not covered" >new SNS(snsConfig)</span>
925
+ <span class="cstat-no" title="statement not covered" > debug('SNS application created with config ', snsConfig)</span>
926
+ <span class="cstat-no" title="statement not covered" > snsApplications.push(snsApplication)</span>
927
927
  })
928
- return {
928
+ <span class="cstat-no" title="statement not covered" > return {</span>
929
929
  // Used to retrieve the underlying interface for a platform
930
- getSnsApplication (platform) {
931
- return _.find(snsApplications, application =&gt; application.platform === platform.toUpperCase())
930
+ <span class="fstat-no" title="function not covered" > ge</span>tSnsApplication (platform) {
931
+ <span class="cstat-no" title="statement not covered" > return _.find(snsApplications, <span class="fstat-no" title="function not covered" >ap</span>plication =&gt; <span class="cstat-no" title="statement not covered" >application.platform === platform.toUpperCase())</span></span>
932
932
  },
933
- getMessagePayload (message, platform) {
933
+ <span class="fstat-no" title="function not covered" > ge</span>tMessagePayload (message, platform) {
934
934
  // Transform in internal data structure if only a string is given
935
- <span class="missing-if-branch" title="else path not taken" >E</span>if (typeof message === 'string') {
936
- message = { title: message, body: message }
935
+ <span class="cstat-no" title="statement not covered" > if (typeof message === 'string') {</span>
936
+ <span class="cstat-no" title="statement not covered" > message = { title: message, body: message }</span>
937
937
  }
938
- const jsonMessage = { default: message.title }
938
+ const jsonMessage = <span class="cstat-no" title="statement not covered" >{ default: message.title }</span>
939
939
  // For stacking we need a unique increasing ID per notification on Android
940
- let notId = 1
941
- <span class="missing-if-branch" title="if path not taken" >I</span>if (message.createdAt &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >message.updatedAt) {</span>
940
+ let notId = <span class="cstat-no" title="statement not covered" >1</span>
941
+ <span class="cstat-no" title="statement not covered" > if (message.createdAt &amp;&amp; message.updatedAt) {</span>
942
942
  // Use the difference in seconds between creation/update time
943
943
  <span class="cstat-no" title="statement not covered" > if (moment.isMoment(message.createdAt) &amp;&amp; moment.isMoment(message.updatedAt)) {</span>
944
- <span class="cstat-no" title="statement not covered" > notId = (m</span>essage.updatedAt.valueOf() - message.createdAt.valueOf())
944
+ <span class="cstat-no" title="statement not covered" > notId = (message.updatedAt.valueOf() - message.createdAt.valueOf())</span>
945
945
  } else <span class="cstat-no" title="statement not covered" >if (message.createdAt instanceof Date &amp;&amp; message.updatedAt instanceof Date) {</span>
946
- <span class="cstat-no" title="statement not covered" > notId = (m</span>essage.updatedAt.getTime() - message.createdAt.getTime())
946
+ <span class="cstat-no" title="statement not covered" > notId = (message.updatedAt.getTime() - message.createdAt.getTime())</span>
947
947
  } else {
948
948
  // Assume strings
949
- <span class="cstat-no" title="statement not covered" > notId = (n</span>ew Date(message.updatedAt).getTime() - new Date(message.createdAt).getTime())
949
+ <span class="cstat-no" title="statement not covered" > notId = (new Date(message.updatedAt).getTime() - new Date(message.createdAt).getTime())</span>
950
950
  }
951
951
  }
952
- if (platform === SNS.SUPPORTED_PLATFORMS.SMS) {
953
- jsonMessage.sms = message.body
954
- } else <span class="missing-if-branch" title="if path not taken" >I</span>if (platform === SNS.SUPPORTED_PLATFORMS.EMAIL) {
955
- <span class="cstat-no" title="statement not covered" > jsonMessage.s</span>ubject = message.title
956
- <span class="cstat-no" title="statement not covered" > jsonMessage.e</span>mail = message.body
957
- } else <span class="missing-if-branch" title="if path not taken" >I</span>if (platform === SNS.SUPPORTED_PLATFORMS.IOS) {
952
+ <span class="cstat-no" title="statement not covered" > if (platform === SNS.SUPPORTED_PLATFORMS.SMS) {</span>
953
+ <span class="cstat-no" title="statement not covered" > jsonMessage.sms = message.body</span>
954
+ } else <span class="cstat-no" title="statement not covered" >if (platform === SNS.SUPPORTED_PLATFORMS.EMAIL) {</span>
955
+ <span class="cstat-no" title="statement not covered" > jsonMessage.subject = message.title</span>
956
+ <span class="cstat-no" title="statement not covered" > jsonMessage.email = message.body</span>
957
+ } else <span class="cstat-no" title="statement not covered" >if (platform === SNS.SUPPORTED_PLATFORMS.IOS) {</span>
958
958
  // iOS
959
959
  const aps = <span class="cstat-no" title="statement not covered" >{</span>
960
960
  alert: message.title,
961
961
  notId
962
962
  }
963
- <span class="cstat-no" title="statement not covered" > if (message.sound) <span class="cstat-no" title="statement not covered" >aps.s</span></span>ound = message.sound
964
- <span class="cstat-no" title="statement not covered" > jsonMessage.A</span>PNS = JSON.stringify({ aps })
963
+ <span class="cstat-no" title="statement not covered" > if (message.sound) <span class="cstat-no" title="statement not covered" >aps.sound = message.sound</span></span>
964
+ <span class="cstat-no" title="statement not covered" > jsonMessage.APNS = JSON.stringify({ aps })</span>
965
965
  } else {
966
966
  // ANDROID
967
- const data = {
967
+ const data = <span class="cstat-no" title="statement not covered" >{</span>
968
968
  title: message.title,
969
969
  notId
970
970
  }
971
- <span class="missing-if-branch" title="else path not taken" >E</span>if (message.body) data.message = message.body
972
- <span class="missing-if-branch" title="if path not taken" >I</span>if (message.sound) <span class="cstat-no" title="statement not covered" >data.s</span>oundname = message.sound
973
- <span class="missing-if-branch" title="if path not taken" >I</span>if (message.vibration) <span class="cstat-no" title="statement not covered" >data.v</span>ibrationPattern = message.vibration
974
- jsonMessage.GCM = JSON.stringify({ data })
971
+ <span class="cstat-no" title="statement not covered" > if (message.body) <span class="cstat-no" title="statement not covered" >data.message = message.body</span></span>
972
+ <span class="cstat-no" title="statement not covered" > if (message.sound) <span class="cstat-no" title="statement not covered" >data.soundname = message.sound</span></span>
973
+ <span class="cstat-no" title="statement not covered" > if (message.vibration) <span class="cstat-no" title="statement not covered" >data.vibrationPattern = message.vibration</span></span>
974
+ <span class="cstat-no" title="statement not covered" > jsonMessage.GCM = JSON.stringify({ data })</span>
975
975
  }
976
- return jsonMessage
976
+ <span class="cstat-no" title="statement not covered" > return jsonMessage</span>
977
977
  },
978
- getDevices (user) {
979
- let devices = []
980
- if (user.devices) devices = user.devices
981
- else <span class="missing-if-branch" title="if path not taken" >I</span>if (user.phone &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >this.g</span>etSnsApplication('SMS')) {
978
+ <span class="fstat-no" title="function not covered" > ge</span>tDevices (user) {
979
+ let devices = <span class="cstat-no" title="statement not covered" >[]</span>
980
+ <span class="cstat-no" title="statement not covered" > if (user.devices) <span class="cstat-no" title="statement not covered" >devices = user.devices</span></span>
981
+ else <span class="cstat-no" title="statement not covered" >if (user.phone &amp;&amp; this.getSnsApplication('SMS')) {</span>
982
982
  // Specific case of SMS, in this case the number replace the device registration ID/arn ARN
983
- <span class="cstat-no" title="statement not covered" > devices.p</span>ush({
983
+ <span class="cstat-no" title="statement not covered" > devices.push({</span>
984
984
  registrationId: user.phone, arn: user.phone, platform: 'SMS'
985
985
  })
986
- } else <span class="missing-if-branch" title="if path not taken" >I</span>if (user.email &amp;&amp; this.getSnsApplication('EMAIL')) {
986
+ } else <span class="cstat-no" title="statement not covered" >if (user.email &amp;&amp; this.getSnsApplication('EMAIL')) {</span>
987
987
  // Specific case of Email, in this case the address replace the device registration ID/arn ARN
988
- <span class="cstat-no" title="statement not covered" > devices.p</span>ush({
988
+ <span class="cstat-no" title="statement not covered" > devices.push({</span>
989
989
  registrationId: user.email, arn: user.email, platform: 'EMAIL'
990
990
  })
991
991
  }
992
- return devices
992
+ <span class="cstat-no" title="statement not covered" > return devices</span>
993
993
  },
994
- createDevice (device, user) {
995
- return new Promise((resolve, reject) =&gt; {
996
- const application = this.getSnsApplication(device.platform)
997
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!application) {
998
- <span class="cstat-no" title="statement not covered" > reject(n</span>ew Error('Cannot register device with token ' + device.registrationId + ' because there is no platform application for ' + device.platform))
994
+ <span class="fstat-no" title="function not covered" > cr</span>eateDevice (device, user) {
995
+ <span class="cstat-no" title="statement not covered" > return new Promise(<span class="fstat-no" title="function not covered" >(r</span>esolve, reject) =&gt; {</span>
996
+ const application = <span class="cstat-no" title="statement not covered" >this.getSnsApplication(device.platform)</span>
997
+ <span class="cstat-no" title="statement not covered" > if (!application) {</span>
998
+ <span class="cstat-no" title="statement not covered" > reject(new Error('Cannot register device with token ' + device.registrationId + ' because there is no platform application for ' + device.platform))</span>
999
999
  <span class="cstat-no" title="statement not covered" > return</span>
1000
1000
  }
1001
1001
  // Check if already registered
1002
- const devices = this.getDevices(user)
1003
- const previousDevice = _.find(devices, userDevice =&gt; userDevice.registrationId === device.registrationId)
1004
- <span class="missing-if-branch" title="if path not taken" >I</span>if (previousDevice) {
1005
- <span class="cstat-no" title="statement not covered" > debug('</span>Already registered device with token ' + previousDevice.registrationId + ' and ARN ' + previousDevice.arn + ' for user ' + user._id.toString())
1006
- <span class="cstat-no" title="statement not covered" > resolve(d</span>evice.arn)
1002
+ const devices = <span class="cstat-no" title="statement not covered" >this.getDevices(user)</span>
1003
+ const previousDevice = <span class="cstat-no" title="statement not covered" >_.find(devices, <span class="fstat-no" title="function not covered" >us</span>erDevice =&gt; <span class="cstat-no" title="statement not covered" >userDevice.registrationId === device.registrationId)</span></span>
1004
+ <span class="cstat-no" title="statement not covered" > if (previousDevice) {</span>
1005
+ <span class="cstat-no" title="statement not covered" > debug('Already registered device with token ' + previousDevice.registrationId + ' and ARN ' + previousDevice.arn + ' for user ' + user._id.toString())</span>
1006
+ <span class="cstat-no" title="statement not covered" > resolve(device.arn)</span>
1007
1007
  <span class="cstat-no" title="statement not covered" > return</span>
1008
1008
  }
1009
- application.addUser(device.registrationId, '', (err, endpointArn) =&gt; {
1010
- <span class="missing-if-branch" title="if path not taken" >I</span>if (err) <span class="cstat-no" title="statement not covered" >reject(e</span>rr)
1009
+ <span class="cstat-no" title="statement not covered" > application.addUser(device.registrationId, '', <span class="fstat-no" title="function not covered" >(e</span>rr, endpointArn) =&gt; {</span>
1010
+ <span class="cstat-no" title="statement not covered" > if (err) <span class="cstat-no" title="statement not covered" >reject(err)</span></span>
1011
1011
  else {
1012
- debug('Registered device with token ' + device.registrationId + ' and ARN ' + endpointArn + ' for user ' + user._id.toString())
1013
- resolve(endpointArn)
1012
+ <span class="cstat-no" title="statement not covered" > debug('Registered device with token ' + device.registrationId + ' and ARN ' + endpointArn + ' for user ' + user._id.toString())</span>
1013
+ <span class="cstat-no" title="statement not covered" > resolve(endpointArn)</span>
1014
1014
  }
1015
1015
  })
1016
1016
  })
1017
1017
  },
1018
- updateDevice (registrationId, device, user) {
1019
- return new Promise((resolve, reject) =&gt; {
1018
+ <span class="fstat-no" title="function not covered" > up</span>dateDevice (registrationId, device, user) {
1019
+ <span class="cstat-no" title="statement not covered" > return new Promise(<span class="fstat-no" title="function not covered" >(r</span>esolve, reject) =&gt; {</span>
1020
1020
  // Check if already registered
1021
- const devices = this.getDevices(user)
1022
- const previousDevice = _.find(devices, userDevice =&gt; userDevice.registrationId === device.registrationId)
1023
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!previousDevice) {
1024
- <span class="cstat-no" title="statement not covered" > reject(n</span>ew Error('Cannot find device with token ' + device.registrationId + ' and ARN ' + device.arn + ' for user ' + user._id.toString()))
1021
+ const devices = <span class="cstat-no" title="statement not covered" >this.getDevices(user)</span>
1022
+ const previousDevice = <span class="cstat-no" title="statement not covered" >_.find(devices, <span class="fstat-no" title="function not covered" >us</span>erDevice =&gt; <span class="cstat-no" title="statement not covered" >userDevice.registrationId === device.registrationId)</span></span>
1023
+ <span class="cstat-no" title="statement not covered" > if (!previousDevice) {</span>
1024
+ <span class="cstat-no" title="statement not covered" > reject(new Error('Cannot find device with token ' + device.registrationId + ' and ARN ' + device.arn + ' for user ' + user._id.toString()))</span>
1025
1025
  <span class="cstat-no" title="statement not covered" > return</span>
1026
1026
  }
1027
- const application = this.getSnsApplication(device.platform)
1028
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!application) {
1029
- <span class="cstat-no" title="statement not covered" > reject(n</span>ew Error('Cannot update device with token ' + device.registrationId + ' because there is no platform application for ' + device.platform))
1027
+ const application = <span class="cstat-no" title="statement not covered" >this.getSnsApplication(device.platform)</span>
1028
+ <span class="cstat-no" title="statement not covered" > if (!application) {</span>
1029
+ <span class="cstat-no" title="statement not covered" > reject(new Error('Cannot update device with token ' + device.registrationId + ' because there is no platform application for ' + device.platform))</span>
1030
1030
  <span class="cstat-no" title="statement not covered" > return</span>
1031
1031
  }
1032
1032
  // First check if device do exists
1033
- application.getUser(device.arn, (err, attributes) =&gt; {
1034
- if (err) reject(err)
1035
- else <span class="missing-if-branch" title="else path not taken" >E</span>if ((attributes.Token !== registrationId) || (<span class="branch-1 cbranch-no" title="branch not covered" >attributes.Enabled === 'false')) {</span>
1033
+ <span class="cstat-no" title="statement not covered" > application.getUser(device.arn, <span class="fstat-no" title="function not covered" >(e</span>rr, attributes) =&gt; {</span>
1034
+ <span class="cstat-no" title="statement not covered" > if (err) <span class="cstat-no" title="statement not covered" >reject(err)</span></span>
1035
+ else <span class="cstat-no" title="statement not covered" >if ((attributes.Token !== registrationId) || (attributes.Enabled === 'false')) {</span>
1036
1036
  // Update token and ensure device is enabled
1037
- debug('Updating device with token ' + device.registrationId + ' and ARN ' + device.arn + ' to ' + registrationId + ' for user ' + user._id.toString())
1038
- application.setAttributes(device.arn, { Token: registrationId, Enabled: 'true' }, (err, attributes) =&gt; {
1039
- <span class="missing-if-branch" title="if path not taken" >I</span>if (err) <span class="cstat-no" title="statement not covered" >reject(e</span>rr)
1037
+ <span class="cstat-no" title="statement not covered" > debug('Updating device with token ' + device.registrationId + ' and ARN ' + device.arn + ' to ' + registrationId + ' for user ' + user._id.toString())</span>
1038
+ <span class="cstat-no" title="statement not covered" > application.setAttributes(device.arn, { Token: registrationId, Enabled: 'true' }, <span class="fstat-no" title="function not covered" >(e</span>rr, attributes) =&gt; {</span>
1039
+ <span class="cstat-no" title="statement not covered" > if (err) <span class="cstat-no" title="statement not covered" >reject(err)</span></span>
1040
1040
  else {
1041
- device.registrationId = registrationId
1042
- resolve(device)
1041
+ <span class="cstat-no" title="statement not covered" > device.registrationId = registrationId</span>
1042
+ <span class="cstat-no" title="statement not covered" > resolve(device)</span>
1043
1043
  }
1044
1044
  })
1045
1045
  } else {
1046
- <span class="cstat-no" title="statement not covered" > resolve(d</span>evice)
1046
+ <span class="cstat-no" title="statement not covered" > resolve(device)</span>
1047
1047
  }
1048
1048
  })
1049
1049
  })
1050
1050
  },
1051
- removeDevice (registrationId, user) {
1052
- return new Promise((resolve, reject) =&gt; {
1051
+ <span class="fstat-no" title="function not covered" > re</span>moveDevice (registrationId, user) {
1052
+ <span class="cstat-no" title="statement not covered" > return new Promise(<span class="fstat-no" title="function not covered" >(r</span>esolve, reject) =&gt; {</span>
1053
1053
  // Check if already registered
1054
- const devices = this.getDevices(user)
1055
- const device = _.find(devices, device =&gt; device.registrationId === registrationId)
1056
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!device) {
1057
- <span class="cstat-no" title="statement not covered" > debug('</span>Cannot find device with token ' + registrationId + ' for user ' + user._id.toString())
1054
+ const devices = <span class="cstat-no" title="statement not covered" >this.getDevices(user)</span>
1055
+ const device = <span class="cstat-no" title="statement not covered" >_.find(devices, <span class="fstat-no" title="function not covered" >de</span>vice =&gt; <span class="cstat-no" title="statement not covered" >device.registrationId === registrationId)</span></span>
1056
+ <span class="cstat-no" title="statement not covered" > if (!device) {</span>
1057
+ <span class="cstat-no" title="statement not covered" > debug('Cannot find device with token ' + registrationId + ' for user ' + user._id.toString())</span>
1058
1058
  <span class="cstat-no" title="statement not covered" > resolve()</span>
1059
1059
  <span class="cstat-no" title="statement not covered" > return</span>
1060
1060
  }
1061
- const application = this.getSnsApplication(device.platform)
1062
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!application) {
1063
- <span class="cstat-no" title="statement not covered" > reject(n</span>ew Error('Cannot unbind device with token ' + device.registrationId + ' because there is no platform application for ' + device.platform))
1061
+ const application = <span class="cstat-no" title="statement not covered" >this.getSnsApplication(device.platform)</span>
1062
+ <span class="cstat-no" title="statement not covered" > if (!application) {</span>
1063
+ <span class="cstat-no" title="statement not covered" > reject(new Error('Cannot unbind device with token ' + device.registrationId + ' because there is no platform application for ' + device.platform))</span>
1064
1064
  <span class="cstat-no" title="statement not covered" > return</span>
1065
1065
  }
1066
- application.deleteUser(device.arn, (err) =&gt; {
1067
- <span class="missing-if-branch" title="if path not taken" >I</span>if (err) <span class="cstat-no" title="statement not covered" >reject(e</span>rr)
1066
+ <span class="cstat-no" title="statement not covered" > application.deleteUser(device.arn, <span class="fstat-no" title="function not covered" >(e</span>rr) =&gt; {</span>
1067
+ <span class="cstat-no" title="statement not covered" > if (err) <span class="cstat-no" title="statement not covered" >reject(err)</span></span>
1068
1068
  else {
1069
- debug('Unregistered device with token ' + device.registrationId + ' and ARN ' + device.arn + ' for user ' + user._id.toString())
1070
- resolve(device)
1069
+ <span class="cstat-no" title="statement not covered" > debug('Unregistered device with token ' + device.registrationId + ' and ARN ' + device.arn + ' for user ' + user._id.toString())</span>
1070
+ <span class="cstat-no" title="statement not covered" > resolve(device)</span>
1071
1071
  }
1072
1072
  })
1073
1073
  })
1074
1074
  },
1075
- publishToDevices (user, message) {
1075
+ <span class="fstat-no" title="function not covered" > pu</span>blishToDevices (user, message) {
1076
1076
  // Process with each registered platform
1077
- const messagePromises = []
1078
- const devices = this.getDevices(user)
1079
- devices.forEach(device =&gt; {
1080
- const application = this.getSnsApplication(device.platform)
1081
- messagePromises.push(new Promise((resolve, reject) =&gt; {
1082
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!application) {
1083
- <span class="cstat-no" title="statement not covered" > reject(n</span>ew Error('Cannot send message to device with token ' + device.registrationId + ' because there is no platform application for ' + device.platform))
1077
+ const messagePromises = <span class="cstat-no" title="statement not covered" >[]</span>
1078
+ const devices = <span class="cstat-no" title="statement not covered" >this.getDevices(user)</span>
1079
+ <span class="cstat-no" title="statement not covered" > devices.forEach(<span class="fstat-no" title="function not covered" >de</span>vice =&gt; {</span>
1080
+ const application = <span class="cstat-no" title="statement not covered" >this.getSnsApplication(device.platform)</span>
1081
+ <span class="cstat-no" title="statement not covered" > messagePromises.push(new Promise(<span class="fstat-no" title="function not covered" >(r</span>esolve, reject) =&gt; {</span>
1082
+ <span class="cstat-no" title="statement not covered" > if (!application) {</span>
1083
+ <span class="cstat-no" title="statement not covered" > reject(new Error('Cannot send message to device with token ' + device.registrationId + ' because there is no platform application for ' + device.platform))</span>
1084
1084
  <span class="cstat-no" title="statement not covered" > return</span>
1085
1085
  }
1086
- const jsonMessage = this.getMessagePayload(message, application.platform)
1087
- application.sendMessage(device.arn, jsonMessage, (err, messageId) =&gt; {
1088
- <span class="missing-if-branch" title="if path not taken" >I</span>if (err) {
1086
+ const jsonMessage = <span class="cstat-no" title="statement not covered" >this.getMessagePayload(message, application.platform)</span>
1087
+ <span class="cstat-no" title="statement not covered" > application.sendMessage(device.arn, jsonMessage, <span class="fstat-no" title="function not covered" >(e</span>rr, messageId) =&gt; {</span>
1088
+ <span class="cstat-no" title="statement not covered" > if (err) {</span>
1089
1089
  // Be tolerant to SNS errors because some endpoints might have been revoked
1090
1090
  // reject(err)
1091
- <span class="cstat-no" title="statement not covered" > debug('</span>Unable to publish message to device with token ' + device.registrationId + ' and ARN ' + device.arn + ' for platform ' + application.platform, jsonMessage, err)
1092
- <span class="cstat-no" title="statement not covered" > resolve({</span> [application.platform]: null })
1091
+ <span class="cstat-no" title="statement not covered" > debug('Unable to publish message to device with token ' + device.registrationId + ' and ARN ' + device.arn + ' for platform ' + application.platform, jsonMessage, err)</span>
1092
+ <span class="cstat-no" title="statement not covered" > resolve({ [application.platform]: null })</span>
1093
1093
  } else {
1094
- debug('Published message ' + messageId + ' to device with token ' + device.registrationId + ' and ARN ' + device.arn + ' for platform ' + application.platform, jsonMessage)
1095
- resolve({ [application.platform]: messageId })
1094
+ <span class="cstat-no" title="statement not covered" > debug('Published message ' + messageId + ' to device with token ' + device.registrationId + ' and ARN ' + device.arn + ' for platform ' + application.platform, jsonMessage)</span>
1095
+ <span class="cstat-no" title="statement not covered" > resolve({ [application.platform]: messageId })</span>
1096
1096
  }
1097
1097
  })
1098
1098
  }))
1099
1099
  })
1100
- return Promise.all(messagePromises)
1101
- .then(results =&gt; results.reduce((messageIds, messageId) =&gt; Object.assign(messageIds, messageId), {}))
1100
+ <span class="cstat-no" title="statement not covered" > return Promise.all(messagePromises)</span>
1101
+ .then(<span class="fstat-no" title="function not covered" >re</span>sults =&gt; <span class="cstat-no" title="statement not covered" >results.reduce(<span class="fstat-no" title="function not covered" >(m</span>essageIds, messageId) =&gt; <span class="cstat-no" title="statement not covered" >Object.assign(messageIds, messageId),</span> {}))</span>
1102
1102
  },
1103
- async createPlatformTopics (object, service, topicField, patch = true) {
1103
+ <span class="fstat-no" title="function not covered" > as</span>ync createPlatformTopics (object, service, topicField, patch = <span class="branch-0 cbranch-no" title="branch not covered" >true)</span> {
1104
1104
  // Process with each registered platform
1105
- const topicPromises = []
1106
- snsApplications.forEach(application =&gt; {
1107
- topicPromises.push(new Promise((resolve, reject) =&gt; {
1105
+ const topicPromises = <span class="cstat-no" title="statement not covered" >[]</span>
1106
+ <span class="cstat-no" title="statement not covered" > snsApplications.forEach(<span class="fstat-no" title="function not covered" >ap</span>plication =&gt; {</span>
1107
+ <span class="cstat-no" title="statement not covered" > topicPromises.push(new Promise(<span class="fstat-no" title="function not covered" >(r</span>esolve, reject) =&gt; {</span>
1108
1108
  // The topic name will be the object ID
1109
- application.createTopic(generateTopicName(object, application), (err, topicArn) =&gt; {
1110
- <span class="missing-if-branch" title="if path not taken" >I</span>if (err) {
1111
- <span class="cstat-no" title="statement not covered" > reject(e</span>rr)
1109
+ <span class="cstat-no" title="statement not covered" > application.createTopic(generateTopicName(object, application), <span class="fstat-no" title="function not covered" >(e</span>rr, topicArn) =&gt; {</span>
1110
+ <span class="cstat-no" title="statement not covered" > if (err) {</span>
1111
+ <span class="cstat-no" title="statement not covered" > reject(err)</span>
1112
1112
  } else {
1113
- debug('Created topic ' + object._id.toString() + ' with ARN ' + topicArn + ' for platform ' + application.platform)
1114
- resolve({ [application.platform]: topicArn })
1113
+ <span class="cstat-no" title="statement not covered" > debug('Created topic ' + object._id.toString() + ' with ARN ' + topicArn + ' for platform ' + application.platform)</span>
1114
+ <span class="cstat-no" title="statement not covered" > resolve({ [application.platform]: topicArn })</span>
1115
1115
  }
1116
1116
  })
1117
1117
  }))
1118
1118
  })
1119
- const results = await Promise.all(topicPromises)
1120
- const topics = results.reduce((topics, topic) =&gt; Object.assign(topics, topic), {})
1121
- <span class="missing-if-branch" title="else path not taken" >E</span>if (patch) {
1122
- return service.patch(object._id, { [topicField]: topics })
1119
+ const results = <span class="cstat-no" title="statement not covered" >await Promise.all(topicPromises)</span>
1120
+ const topics = <span class="cstat-no" title="statement not covered" >results.reduce(<span class="fstat-no" title="function not covered" >(t</span>opics, topic) =&gt; <span class="cstat-no" title="statement not covered" >Object.assign(topics, topic),</span> {})</span>
1121
+ <span class="cstat-no" title="statement not covered" > if (patch) {</span>
1122
+ <span class="cstat-no" title="statement not covered" > return service.patch(object._id, { [topicField]: topics })</span>
1123
1123
  } else {
1124
- <span class="cstat-no" title="statement not covered" > return t</span>opics
1124
+ <span class="cstat-no" title="statement not covered" > return topics</span>
1125
1125
  }
1126
1126
  },
1127
- publishToPlatformTopics (object, message, topicField) {
1127
+ <span class="fstat-no" title="function not covered" > pu</span>blishToPlatformTopics (object, message, topicField) {
1128
1128
  // Process with each registered platform
1129
- const messagePromises = []
1130
- snsApplications.forEach(application =&gt; {
1131
- messagePromises.push(new Promise((resolve, reject) =&gt; {
1132
- const topicArn = _.get(object, topicField + '.' + application.platform)
1133
- const jsonMessage = this.getMessagePayload(message, application.platform)
1134
- application.publishToTopic(topicArn, jsonMessage, (err, messageId) =&gt; {
1135
- <span class="missing-if-branch" title="if path not taken" >I</span>if (err) {
1136
- <span class="cstat-no" title="statement not covered" > reject(e</span>rr)
1129
+ const messagePromises = <span class="cstat-no" title="statement not covered" >[]</span>
1130
+ <span class="cstat-no" title="statement not covered" > snsApplications.forEach(<span class="fstat-no" title="function not covered" >ap</span>plication =&gt; {</span>
1131
+ <span class="cstat-no" title="statement not covered" > messagePromises.push(new Promise(<span class="fstat-no" title="function not covered" >(r</span>esolve, reject) =&gt; {</span>
1132
+ const topicArn = <span class="cstat-no" title="statement not covered" >_.get(object, topicField + '.' + application.platform)</span>
1133
+ const jsonMessage = <span class="cstat-no" title="statement not covered" >this.getMessagePayload(message, application.platform)</span>
1134
+ <span class="cstat-no" title="statement not covered" > application.publishToTopic(topicArn, jsonMessage, <span class="fstat-no" title="function not covered" >(e</span>rr, messageId) =&gt; {</span>
1135
+ <span class="cstat-no" title="statement not covered" > if (err) {</span>
1136
+ <span class="cstat-no" title="statement not covered" > reject(err)</span>
1137
1137
  } else {
1138
- debug('Published message ' + messageId + ' to topic ' + object._id.toString() + ' with ARN ' + topicArn + ' for platform ' + application.platform, jsonMessage)
1139
- resolve({ [application.platform]: messageId })
1138
+ <span class="cstat-no" title="statement not covered" > debug('Published message ' + messageId + ' to topic ' + object._id.toString() + ' with ARN ' + topicArn + ' for platform ' + application.platform, jsonMessage)</span>
1139
+ <span class="cstat-no" title="statement not covered" > resolve({ [application.platform]: messageId })</span>
1140
1140
  }
1141
1141
  })
1142
1142
  }))
1143
1143
  })
1144
- return Promise.all(messagePromises)
1145
- .then(results =&gt; results.reduce((messageIds, messageId) =&gt; Object.assign(messageIds, messageId), {}))
1144
+ <span class="cstat-no" title="statement not covered" > return Promise.all(messagePromises)</span>
1145
+ .then(<span class="fstat-no" title="function not covered" >re</span>sults =&gt; <span class="cstat-no" title="statement not covered" >results.reduce(<span class="fstat-no" title="function not covered" >(m</span>essageIds, messageId) =&gt; <span class="cstat-no" title="statement not covered" >Object.assign(messageIds, messageId),</span> {}))</span>
1146
1146
  },
1147
- async removePlatformTopics (object, service, topicField, patch = true) {
1147
+ <span class="fstat-no" title="function not covered" > as</span>ync removePlatformTopics (object, service, topicField, patch = <span class="branch-0 cbranch-no" title="branch not covered" >true)</span> {
1148
1148
  // First get all subscribers of the topic because we do not store them
1149
1149
  // Process with each registered platform
1150
- const platformSubscriptions = await this.getPlatformSubscriptions(object, topicField)
1150
+ const platformSubscriptions = <span class="cstat-no" title="statement not covered" >await this.getPlatformSubscriptions(object, topicField)</span>
1151
1151
  // Process with each registered platform
1152
- const unsubscriptionPromises = []
1153
- const topicPromises = []
1154
- snsApplications.forEach((application, i) =&gt; {
1155
- const topicArn = _.get(object, topicField + '.' + application.platform)
1152
+ const unsubscriptionPromises = <span class="cstat-no" title="statement not covered" >[]</span>
1153
+ const topicPromises = <span class="cstat-no" title="statement not covered" >[]</span>
1154
+ <span class="cstat-no" title="statement not covered" > snsApplications.forEach(<span class="fstat-no" title="function not covered" >(a</span>pplication, i) =&gt; {</span>
1155
+ const topicArn = <span class="cstat-no" title="statement not covered" >_.get(object, topicField + '.' + application.platform)</span>
1156
1156
  // Unsubscribe all users
1157
- platformSubscriptions[i].forEach(<span class="fstat-no" title="function not covered" >subscription =&gt; {</span>
1158
- <span class="cstat-no" title="statement not covered" > unsubscriptionPromises.p</span>ush(new Promise(<span class="fstat-no" title="function not covered" >(r</span>esolve, reject) =&gt; {
1159
- <span class="cstat-no" title="statement not covered" > application.u</span>nsubscribe(subscription.SubscriptionArn, <span class="fstat-no" title="function not covered" >(e</span>rr) =&gt; {
1157
+ <span class="cstat-no" title="statement not covered" > platformSubscriptions[i].forEach(<span class="fstat-no" title="function not covered" >su</span>bscription =&gt; {</span>
1158
+ <span class="cstat-no" title="statement not covered" > unsubscriptionPromises.push(new Promise(<span class="fstat-no" title="function not covered" >(r</span>esolve, reject) =&gt; {</span>
1159
+ <span class="cstat-no" title="statement not covered" > application.unsubscribe(subscription.SubscriptionArn, <span class="fstat-no" title="function not covered" >(e</span>rr) =&gt; {</span>
1160
1160
  <span class="cstat-no" title="statement not covered" > if (err) {</span>
1161
- <span class="cstat-no" title="statement not covered" > reject(n</span>ew GeneralError(err, { arn: subscription.SubscriptionArn }))
1161
+ <span class="cstat-no" title="statement not covered" > reject(new GeneralError(err, { arn: subscription.SubscriptionArn }))</span>
1162
1162
  } else {
1163
- <span class="cstat-no" title="statement not covered" > debug('</span>Unsubscribed device with ARN ' + subscription.SubscriptionArn + ' from topic with ARN ' + topicArn)
1164
- <span class="cstat-no" title="statement not covered" > resolve({</span> arn: subscription.SubscriptionArn })
1163
+ <span class="cstat-no" title="statement not covered" > debug('Unsubscribed device with ARN ' + subscription.SubscriptionArn + ' from topic with ARN ' + topicArn)</span>
1164
+ <span class="cstat-no" title="statement not covered" > resolve({ arn: subscription.SubscriptionArn })</span>
1165
1165
  }
1166
1166
  })
1167
1167
  }))
1168
1168
  })
1169
1169
  // Then delete topic
1170
- topicPromises.push(new Promise((resolve, reject) =&gt; {
1171
- application.deleteTopic(topicArn, (err) =&gt; {
1172
- <span class="missing-if-branch" title="if path not taken" >I</span>if (err) {
1173
- <span class="cstat-no" title="statement not covered" > reject(e</span>rr)
1170
+ <span class="cstat-no" title="statement not covered" > topicPromises.push(new Promise(<span class="fstat-no" title="function not covered" >(r</span>esolve, reject) =&gt; {</span>
1171
+ <span class="cstat-no" title="statement not covered" > application.deleteTopic(topicArn, <span class="fstat-no" title="function not covered" >(e</span>rr) =&gt; {</span>
1172
+ <span class="cstat-no" title="statement not covered" > if (err) {</span>
1173
+ <span class="cstat-no" title="statement not covered" > reject(err)</span>
1174
1174
  } else {
1175
- debug('Removed topic ' + object._id.toString() + ' with ARN ' + topicArn + ' for platform ' + application.platform)
1176
- resolve(topicArn)
1175
+ <span class="cstat-no" title="statement not covered" > debug('Removed topic ' + object._id.toString() + ' with ARN ' + topicArn + ' for platform ' + application.platform)</span>
1176
+ <span class="cstat-no" title="statement not covered" > resolve(topicArn)</span>
1177
1177
  }
1178
1178
  })
1179
1179
  }))
1180
1180
  })
1181
- await Promise.all(unsubscriptionPromises)
1182
- const topicArns = await Promise.all(topicPromises)
1183
- <span class="missing-if-branch" title="else path not taken" >E</span>if (patch) {
1184
- return service.patch(object._id, { [topicField]: null })
1181
+ <span class="cstat-no" title="statement not covered" > await Promise.all(unsubscriptionPromises)</span>
1182
+ const topicArns = <span class="cstat-no" title="statement not covered" >await Promise.all(topicPromises)</span>
1183
+ <span class="cstat-no" title="statement not covered" > if (patch) {</span>
1184
+ <span class="cstat-no" title="statement not covered" > return service.patch(object._id, { [topicField]: null })</span>
1185
1185
  } else {
1186
- <span class="cstat-no" title="statement not covered" > return t</span>opicArns
1186
+ <span class="cstat-no" title="statement not covered" > return topicArns</span>
1187
1187
  }
1188
1188
  },
1189
- createPlatformSubscriptions (object, users, topicField) {
1189
+ <span class="fstat-no" title="function not covered" > cr</span>eatePlatformSubscriptions (object, users, topicField) {
1190
1190
  // Process with each registered platform
1191
- const subscriptionPromises = []
1192
- snsApplications.forEach(application =&gt; {
1191
+ const subscriptionPromises = <span class="cstat-no" title="statement not covered" >[]</span>
1192
+ <span class="cstat-no" title="statement not covered" > snsApplications.forEach(<span class="fstat-no" title="function not covered" >ap</span>plication =&gt; {</span>
1193
1193
  // Then each target user
1194
- users.forEach(user =&gt; {
1195
- const devices = this.getDevices(user)
1194
+ <span class="cstat-no" title="statement not covered" > users.forEach(<span class="fstat-no" title="function not covered" >us</span>er =&gt; {</span>
1195
+ const devices = <span class="cstat-no" title="statement not covered" >this.getDevices(user)</span>
1196
1196
  // Then each target device
1197
- devices.forEach(device =&gt; {
1198
- if (device.platform.toUpperCase() === application.platform) {
1199
- subscriptionPromises.push(new Promise((resolve, reject) =&gt; {
1200
- const topicArn = _.get(object, topicField + '.' + application.platform)
1201
- application.subscribe(device.arn, topicArn, (err, subscriptionArn) =&gt; {
1202
- <span class="missing-if-branch" title="if path not taken" >I</span>if (err) {
1197
+ <span class="cstat-no" title="statement not covered" > devices.forEach(<span class="fstat-no" title="function not covered" >de</span>vice =&gt; {</span>
1198
+ <span class="cstat-no" title="statement not covered" > if (device.platform.toUpperCase() === application.platform) {</span>
1199
+ <span class="cstat-no" title="statement not covered" > subscriptionPromises.push(new Promise(<span class="fstat-no" title="function not covered" >(r</span>esolve, reject) =&gt; {</span>
1200
+ const topicArn = <span class="cstat-no" title="statement not covered" >_.get(object, topicField + '.' + application.platform)</span>
1201
+ <span class="cstat-no" title="statement not covered" > application.subscribe(device.arn, topicArn, <span class="fstat-no" title="function not covered" >(e</span>rr, subscriptionArn) =&gt; {</span>
1202
+ <span class="cstat-no" title="statement not covered" > if (err) {</span>
1203
1203
  // Be tolerant to SNS errors because some endpoints might have been revoked
1204
1204
  // reject(new GeneralError(err, { [device.registrationId]: { user: user._id } }))
1205
- <span class="cstat-no" title="statement not covered" > debug('</span>Unable to subscribe device with token ' + device.registrationId + ' and ARN ' + device.arn + ' to application topic with ARN ' + topicArn, err)
1206
- <span class="cstat-no" title="statement not covered" > resolve({</span> [device.registrationId]: { user: user._id, arn: null } })
1205
+ <span class="cstat-no" title="statement not covered" > debug('Unable to subscribe device with token ' + device.registrationId + ' and ARN ' + device.arn + ' to application topic with ARN ' + topicArn, err)</span>
1206
+ <span class="cstat-no" title="statement not covered" > resolve({ [device.registrationId]: { user: user._id, arn: null } })</span>
1207
1207
  } else {
1208
- debug('Subscribed device with token ' + device.registrationId + ' and ARN ' + device.arn + ' to application topic with ARN ' + topicArn)
1209
- resolve({ [device.registrationId]: { user: user._id, arn: subscriptionArn } })
1208
+ <span class="cstat-no" title="statement not covered" > debug('Subscribed device with token ' + device.registrationId + ' and ARN ' + device.arn + ' to application topic with ARN ' + topicArn)</span>
1209
+ <span class="cstat-no" title="statement not covered" > resolve({ [device.registrationId]: { user: user._id, arn: subscriptionArn } })</span>
1210
1210
  }
1211
1211
  })
1212
1212
  }))
@@ -1214,54 +1214,54 @@ export default function (name, app, options) {
1214
1214
  })
1215
1215
  })
1216
1216
  })
1217
- return Promise.all(subscriptionPromises)
1217
+ <span class="cstat-no" title="statement not covered" > return Promise.all(subscriptionPromises)</span>
1218
1218
  },
1219
- getPlatformSubscriptions (object, topicField) {
1220
- const subscriptionPromises = []
1221
- snsApplications.forEach(application =&gt; {
1222
- subscriptionPromises.push(new Promise((resolve, reject) =&gt; {
1223
- const topicArn = _.get(object, topicField + '.' + application.platform)
1224
- application.getSubscriptions(topicArn, (err, subscriptions) =&gt; {
1225
- <span class="missing-if-branch" title="if path not taken" >I</span>if (err) {
1219
+ <span class="fstat-no" title="function not covered" > ge</span>tPlatformSubscriptions (object, topicField) {
1220
+ const subscriptionPromises = <span class="cstat-no" title="statement not covered" >[]</span>
1221
+ <span class="cstat-no" title="statement not covered" > snsApplications.forEach(<span class="fstat-no" title="function not covered" >ap</span>plication =&gt; {</span>
1222
+ <span class="cstat-no" title="statement not covered" > subscriptionPromises.push(new Promise(<span class="fstat-no" title="function not covered" >(r</span>esolve, reject) =&gt; {</span>
1223
+ const topicArn = <span class="cstat-no" title="statement not covered" >_.get(object, topicField + '.' + application.platform)</span>
1224
+ <span class="cstat-no" title="statement not covered" > application.getSubscriptions(topicArn, <span class="fstat-no" title="function not covered" >(e</span>rr, subscriptions) =&gt; {</span>
1225
+ <span class="cstat-no" title="statement not covered" > if (err) {</span>
1226
1226
  // Be tolerant to SNS errors because some topics might have been deleted
1227
1227
  // reject(err)
1228
- <span class="cstat-no" title="statement not covered" > debug('</span>Unable to retrieve subscriptions for topic ' + object._id.toString() + ' with ARN ' + topicArn + ' for platform ' + application.platform, err)
1229
- <span class="cstat-no" title="statement not covered" > resolve([</span>])
1228
+ <span class="cstat-no" title="statement not covered" > debug('Unable to retrieve subscriptions for topic ' + object._id.toString() + ' with ARN ' + topicArn + ' for platform ' + application.platform, err)</span>
1229
+ <span class="cstat-no" title="statement not covered" > resolve([])</span>
1230
1230
  } else {
1231
- debug('Retrieved ' + subscriptions.length + ' subscriptions for topic ' + object._id.toString() + ' with ARN ' + topicArn + ' for platform ' + application.platform)
1232
- resolve(subscriptions)
1231
+ <span class="cstat-no" title="statement not covered" > debug('Retrieved ' + subscriptions.length + ' subscriptions for topic ' + object._id.toString() + ' with ARN ' + topicArn + ' for platform ' + application.platform)</span>
1232
+ <span class="cstat-no" title="statement not covered" > resolve(subscriptions)</span>
1233
1233
  }
1234
1234
  })
1235
1235
  }))
1236
1236
  })
1237
- return Promise.all(subscriptionPromises)
1237
+ <span class="cstat-no" title="statement not covered" > return Promise.all(subscriptionPromises)</span>
1238
1238
  },
1239
- removePlatformSubscriptions (object, users, topicField) {
1239
+ <span class="fstat-no" title="function not covered" > re</span>movePlatformSubscriptions (object, users, topicField) {
1240
1240
  // First get all subscribers of the topic because we do not store them
1241
1241
  // Process with each registered platform
1242
- return this.getPlatformSubscriptions(object, topicField)
1243
- .then(platformSubscriptions =&gt; {
1244
- const unsubscriptionPromises = []
1242
+ <span class="cstat-no" title="statement not covered" > return this.getPlatformSubscriptions(object, topicField)</span>
1243
+ .then(<span class="fstat-no" title="function not covered" >pl</span>atformSubscriptions =&gt; {
1244
+ const unsubscriptionPromises = <span class="cstat-no" title="statement not covered" >[]</span>
1245
1245
  // Process with each registered platform
1246
- platformSubscriptions.forEach(subscriptions =&gt; {
1246
+ <span class="cstat-no" title="statement not covered" > platformSubscriptions.forEach(<span class="fstat-no" title="function not covered" >su</span>bscriptions =&gt; {</span>
1247
1247
  // Remove the given subscribers from the topic
1248
- subscriptions.forEach(subscription =&gt; {
1249
- users.forEach(user =&gt; {
1250
- const devices = this.getDevices(user)
1251
- devices.forEach(device =&gt; {
1252
- if (device.arn === subscription.Endpoint) {
1253
- unsubscriptionPromises.push(new Promise((resolve, reject) =&gt; {
1254
- const application = this.getSnsApplication(device.platform)
1255
- const topicArn = _.get(object, topicField + '.' + application.platform)
1256
- application.unsubscribe(subscription.SubscriptionArn, (err) =&gt; {
1257
- <span class="missing-if-branch" title="if path not taken" >I</span>if (err) {
1248
+ <span class="cstat-no" title="statement not covered" > subscriptions.forEach(<span class="fstat-no" title="function not covered" >su</span>bscription =&gt; {</span>
1249
+ <span class="cstat-no" title="statement not covered" > users.forEach(<span class="fstat-no" title="function not covered" >us</span>er =&gt; {</span>
1250
+ const devices = <span class="cstat-no" title="statement not covered" >this.getDevices(user)</span>
1251
+ <span class="cstat-no" title="statement not covered" > devices.forEach(<span class="fstat-no" title="function not covered" >de</span>vice =&gt; {</span>
1252
+ <span class="cstat-no" title="statement not covered" > if (device.arn === subscription.Endpoint) {</span>
1253
+ <span class="cstat-no" title="statement not covered" > unsubscriptionPromises.push(new Promise(<span class="fstat-no" title="function not covered" >(r</span>esolve, reject) =&gt; {</span>
1254
+ const application = <span class="cstat-no" title="statement not covered" >this.getSnsApplication(device.platform)</span>
1255
+ const topicArn = <span class="cstat-no" title="statement not covered" >_.get(object, topicField + '.' + application.platform)</span>
1256
+ <span class="cstat-no" title="statement not covered" > application.unsubscribe(subscription.SubscriptionArn, <span class="fstat-no" title="function not covered" >(e</span>rr) =&gt; {</span>
1257
+ <span class="cstat-no" title="statement not covered" > if (err) {</span>
1258
1258
  // Be tolerant to SNS errors because some endpoints might have been revoked
1259
1259
  // reject(new GeneralError(err, { [device.registrationId]: { user: user._id } }))
1260
- <span class="cstat-no" title="statement not covered" > debug('</span>Unable to unsubscribe device with token ' + device.registrationId + ' and ARN ' + device.arn + ' from topic with ARN ' + topicArn, err)
1261
- <span class="cstat-no" title="statement not covered" > resolve({</span> [device.registrationId]: { user: user._id, arn: null } })
1260
+ <span class="cstat-no" title="statement not covered" > debug('Unable to unsubscribe device with token ' + device.registrationId + ' and ARN ' + device.arn + ' from topic with ARN ' + topicArn, err)</span>
1261
+ <span class="cstat-no" title="statement not covered" > resolve({ [device.registrationId]: { user: user._id, arn: null } })</span>
1262
1262
  } else {
1263
- debug('Unsubscribed device with token ' + device.registrationId + ' and ARN ' + device.arn + ' from topic with ARN ' + topicArn)
1264
- resolve({ [device.registrationId]: { user: user._id, arn: subscription.SubscriptionArn } })
1263
+ <span class="cstat-no" title="statement not covered" > debug('Unsubscribed device with token ' + device.registrationId + ' and ARN ' + device.arn + ' from topic with ARN ' + topicArn)</span>
1264
+ <span class="cstat-no" title="statement not covered" > resolve({ [device.registrationId]: { user: user._id, arn: subscription.SubscriptionArn } })</span>
1265
1265
  }
1266
1266
  })
1267
1267
  }))
@@ -1270,52 +1270,52 @@ export default function (name, app, options) {
1270
1270
  })
1271
1271
  })
1272
1272
  })
1273
- return Promise.all(unsubscriptionPromises)
1273
+ <span class="cstat-no" title="statement not covered" > return Promise.all(unsubscriptionPromises)</span>
1274
1274
  })
1275
1275
  },
1276
1276
  // Used to perform service actions such as create a user, a push notification, a topic, etc.
1277
- create (data, params) {
1278
- debug(`pusher service called for create action=${data.action}`)
1277
+ <span class="fstat-no" title="function not covered" > cr</span>eate (data, params) {
1278
+ <span class="cstat-no" title="statement not covered" > debug(`pusher service called for create action=${data.action}`)</span>
1279
1279
  &nbsp;
1280
- switch (data.action) {
1280
+ <span class="cstat-no" title="statement not covered" > switch (data.action) {</span>
1281
1281
  case 'device':
1282
1282
  // return this.registerDevice(data.device, params.user, params.patch)
1283
- return this.createDevice(data.device, params.user)
1283
+ <span class="cstat-no" title="statement not covered" > return this.createDevice(data.device, params.user)</span>
1284
1284
  case 'topic':
1285
- return this.createPlatformTopics(params.pushObject, params.pushObjectService, data.topicField || defaultTopicField, params.patch)
1285
+ <span class="cstat-no" title="statement not covered" > return this.createPlatformTopics(params.pushObject, params.pushObjectService, data.topicField || defaultTopicField, params.patch)</span>
1286
1286
  case 'subscriptions':
1287
- return this.createPlatformSubscriptions(params.pushObject, params.users, data.topicField || defaultTopicField)
1287
+ <span class="cstat-no" title="statement not covered" > return this.createPlatformSubscriptions(params.pushObject, params.users, data.topicField || defaultTopicField)</span>
1288
1288
  case 'message': {
1289
- const topicField = data.topicField || defaultTopicField
1289
+ const topicField = <span class="cstat-no" title="statement not covered" >data.topicField || defaultTopicField</span>
1290
1290
  // If no topic we assume we want to publish on specific devices
1291
- return _.get(params.pushObject, topicField)
1291
+ <span class="cstat-no" title="statement not covered" > return _.get(params.pushObject, topicField)</span>
1292
1292
  ? this.publishToPlatformTopics(params.pushObject, data.message, topicField)
1293
1293
  : this.publishToDevices(params.pushObject, data.message)
1294
1294
  }
1295
1295
  }
1296
1296
  },
1297
1297
  // Used to perform service actions such as update a user
1298
- update (id, data, params) {
1299
- debug(`pusher service called for update action=${data.action}`)
1298
+ <span class="fstat-no" title="function not covered" > up</span>date (id, data, params) {
1299
+ <span class="cstat-no" title="statement not covered" > debug(`pusher service called for update action=${data.action}`)</span>
1300
1300
  &nbsp;
1301
- switch (data.action) {
1302
- case 'device':
1303
- return this.updateDevice(id, data.device, params.user)
1301
+ <span class="cstat-no" title="statement not covered" > switch (data.action) {</span>
1302
+ <span class="branch-0 cbranch-no" title="branch not covered" > case 'device':</span>
1303
+ <span class="cstat-no" title="statement not covered" > return this.updateDevice(id, data.device, params.user)</span>
1304
1304
  }
1305
1305
  },
1306
1306
  // Used to perform service actions such as remove a user, a topic, etc.
1307
- remove (id, params) {
1308
- const query = params.query
1309
- debug(`pusher service called for remove action=${query.action}`)
1307
+ <span class="fstat-no" title="function not covered" > re</span>move (id, params) {
1308
+ const query = <span class="cstat-no" title="statement not covered" >params.query</span>
1309
+ <span class="cstat-no" title="statement not covered" > debug(`pusher service called for remove action=${query.action}`)</span>
1310
1310
  &nbsp;
1311
- switch (query.action) {
1311
+ <span class="cstat-no" title="statement not covered" > switch (query.action) {</span>
1312
1312
  case 'device':
1313
1313
  // return this.unregisterDevice(id, params.user, params.patch)
1314
- return this.removeDevice(id, params.user)
1314
+ <span class="cstat-no" title="statement not covered" > return this.removeDevice(id, params.user)</span>
1315
1315
  case 'topic':
1316
- return this.removePlatformTopics(params.pushObject, params.pushObjectService, query.topicField || defaultTopicField, params.patch)
1316
+ <span class="cstat-no" title="statement not covered" > return this.removePlatformTopics(params.pushObject, params.pushObjectService, query.topicField || defaultTopicField, params.patch)</span>
1317
1317
  case 'subscriptions':
1318
- return this.removePlatformSubscriptions(params.pushObject, params.users, query.topicField || defaultTopicField)
1318
+ <span class="cstat-no" title="statement not covered" > return this.removePlatformSubscriptions(params.pushObject, params.users, query.topicField || defaultTopicField)</span>
1319
1319
  }
1320
1320
  }
1321
1321
  }
@@ -1327,7 +1327,7 @@ export default function (name, app, options) {
1327
1327
  <div class='footer quiet pad2 space-top1 center small'>
1328
1328
  Code coverage generated by
1329
1329
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
1330
- at Wed Dec 08 2021 20:41:51 GMT+0100 (GMT+01:00)
1330
+ at Thu Feb 17 2022 13:49:01 GMT+0100 (GMT+01:00)
1331
1331
  </div>
1332
1332
  </div>
1333
1333
  <script src="../../../../prettify.js"></script>