@sports-alliance/sports-lib 7.0.8 → 7.0.10

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 (351) hide show
  1. package/lib/cjs/data/data.array.d.ts +2 -3
  2. package/lib/cjs/data/data.array.js +1 -1
  3. package/lib/cjs/data/data.bare.d.ts +2 -1
  4. package/lib/cjs/data/data.d.ts +5 -5
  5. package/lib/cjs/data/data.number.d.ts +1 -2
  6. package/lib/cjs/data/data.position.d.ts +2 -3
  7. package/lib/cjs/data/data.position.js +1 -1
  8. package/lib/cjs/data/data.string.d.ts +2 -3
  9. package/lib/cjs/data/data.string.js +1 -1
  10. package/lib/esm/data/data.array.d.ts +2 -3
  11. package/lib/esm/data/data.bare.d.ts +2 -1
  12. package/lib/esm/data/data.d.ts +5 -5
  13. package/lib/esm/data/data.number.d.ts +1 -2
  14. package/lib/esm/data/data.position.d.ts +2 -3
  15. package/lib/esm/data/data.string.d.ts +2 -3
  16. package/lib/esm/index.js +12034 -152
  17. package/package.json +2 -2
  18. package/.editorconfig +0 -14
  19. package/.eslintignore +0 -4
  20. package/.eslintrc.js +0 -9
  21. package/.prettierignore +0 -25
  22. package/.prettierrc.json +0 -12
  23. package/CODE_OF_CONDUCT.md +0 -76
  24. package/jest.config.js +0 -23
  25. package/lib/esm/activities/activity-parsing-options.js +0 -19
  26. package/lib/esm/activities/activity.interface.js +0 -1
  27. package/lib/esm/activities/activity.js +0 -281
  28. package/lib/esm/activities/activity.json.interface.js +0 -1
  29. package/lib/esm/activities/activity.spec.js +0 -348
  30. package/lib/esm/activities/activity.types.js +0 -1046
  31. package/lib/esm/activities/activityt-types.spec.js +0 -16
  32. package/lib/esm/activities/devices/device.interface.js +0 -1
  33. package/lib/esm/activities/devices/device.js +0 -26
  34. package/lib/esm/activities/devices/device.json.interface.js +0 -1
  35. package/lib/esm/constants/constants.js +0 -8
  36. package/lib/esm/creators/creator.interface.js +0 -1
  37. package/lib/esm/creators/creator.js +0 -37
  38. package/lib/esm/creators/creator.json.interface.js +0 -1
  39. package/lib/esm/creators/creator.spec.js +0 -25
  40. package/lib/esm/data/data-active-lap.js +0 -4
  41. package/lib/esm/data/data-active-lengths.js +0 -4
  42. package/lib/esm/data/data-aerobic-training-effect.js +0 -8
  43. package/lib/esm/data/data-anaerobic-training-effect.js +0 -8
  44. package/lib/esm/data/data-stance-time-balance-left.js +0 -4
  45. package/lib/esm/data/data-stance-time-balance-right.js +0 -4
  46. package/lib/esm/data/data-stance-time-balance.js +0 -3
  47. package/lib/esm/data/data-store.spec.js +0 -78
  48. package/lib/esm/data/data-total-cycles.js +0 -4
  49. package/lib/esm/data/data.absolute-pressure.js +0 -5
  50. package/lib/esm/data/data.accumulated-power.js +0 -8
  51. package/lib/esm/data/data.activity-types.js +0 -7
  52. package/lib/esm/data/data.air-power-avg.js +0 -4
  53. package/lib/esm/data/data.air-power-max.js +0 -4
  54. package/lib/esm/data/data.air-power-min.js +0 -4
  55. package/lib/esm/data/data.air-power.js +0 -8
  56. package/lib/esm/data/data.alti-baro-profile.js +0 -4
  57. package/lib/esm/data/data.altitude-avg.js +0 -4
  58. package/lib/esm/data/data.altitude-gps.js +0 -5
  59. package/lib/esm/data/data.altitude-max.js +0 -4
  60. package/lib/esm/data/data.altitude-min.js +0 -4
  61. package/lib/esm/data/data.altitude-smooth.js +0 -4
  62. package/lib/esm/data/data.altitude.js +0 -8
  63. package/lib/esm/data/data.array.js +0 -13
  64. package/lib/esm/data/data.ascent-time.js +0 -4
  65. package/lib/esm/data/data.ascent.js +0 -4
  66. package/lib/esm/data/data.auto-lap-distance.js +0 -5
  67. package/lib/esm/data/data.auto-lap-duration.js +0 -4
  68. package/lib/esm/data/data.auto-lap-used.js +0 -7
  69. package/lib/esm/data/data.auto-pause-used.js +0 -7
  70. package/lib/esm/data/data.avg-stride-length.js +0 -4
  71. package/lib/esm/data/data.balance.js +0 -6
  72. package/lib/esm/data/data.bare.js +0 -4
  73. package/lib/esm/data/data.battery-charge.js +0 -8
  74. package/lib/esm/data/data.battery-consumption.js +0 -8
  75. package/lib/esm/data/data.battery-current.js +0 -8
  76. package/lib/esm/data/data.battery-life-estimation.js +0 -4
  77. package/lib/esm/data/data.battery-voltage.js +0 -8
  78. package/lib/esm/data/data.bike-pod-used.js +0 -7
  79. package/lib/esm/data/data.boolean.js +0 -9
  80. package/lib/esm/data/data.cadence-avg.js +0 -4
  81. package/lib/esm/data/data.cadence-max.js +0 -4
  82. package/lib/esm/data/data.cadence-min.js +0 -4
  83. package/lib/esm/data/data.cadence.js +0 -8
  84. package/lib/esm/data/data.cycling-dynamics.js +0 -3
  85. package/lib/esm/data/data.cycling-position.js +0 -37
  86. package/lib/esm/data/data.cycling-seated-time.js +0 -5
  87. package/lib/esm/data/data.cycling-standing-time.js +0 -5
  88. package/lib/esm/data/data.descent-time.js +0 -4
  89. package/lib/esm/data/data.descent.js +0 -4
  90. package/lib/esm/data/data.description.js +0 -4
  91. package/lib/esm/data/data.device-location.js +0 -4
  92. package/lib/esm/data/data.device-names.js +0 -7
  93. package/lib/esm/data/data.distance.js +0 -15
  94. package/lib/esm/data/data.duration.js +0 -56
  95. package/lib/esm/data/data.ehpe.js +0 -5
  96. package/lib/esm/data/data.enabled-navigation-systems.js +0 -4
  97. package/lib/esm/data/data.end-altitude.js +0 -4
  98. package/lib/esm/data/data.end-position.js +0 -4
  99. package/lib/esm/data/data.energy.js +0 -8
  100. package/lib/esm/data/data.epoc.js +0 -5
  101. package/lib/esm/data/data.event.js +0 -3
  102. package/lib/esm/data/data.evpe.js +0 -4
  103. package/lib/esm/data/data.feeling.js +0 -15
  104. package/lib/esm/data/data.foot-pod-used.js +0 -7
  105. package/lib/esm/data/data.form-power.js +0 -4
  106. package/lib/esm/data/data.fused-altitude.js +0 -7
  107. package/lib/esm/data/data.fused-location.js +0 -7
  108. package/lib/esm/data/data.gnss-distance.js +0 -4
  109. package/lib/esm/data/data.grade-adjusted-pace-avg.js +0 -15
  110. package/lib/esm/data/data.grade-adjusted-pace-max.js +0 -15
  111. package/lib/esm/data/data.grade-adjusted-pace-min.js +0 -15
  112. package/lib/esm/data/data.grade-adjusted-pace.js +0 -25
  113. package/lib/esm/data/data.grade-adjusted-speed-avg.js +0 -46
  114. package/lib/esm/data/data.grade-adjusted-speed-max.js +0 -46
  115. package/lib/esm/data/data.grade-adjusted-speed-min.js +0 -46
  116. package/lib/esm/data/data.grade-adjusted-speed.js +0 -78
  117. package/lib/esm/data/data.grade-smooth.js +0 -7
  118. package/lib/esm/data/data.grade.js +0 -7
  119. package/lib/esm/data/data.ground-time.js +0 -8
  120. package/lib/esm/data/data.heart-rate-avg.js +0 -4
  121. package/lib/esm/data/data.heart-rate-max.js +0 -4
  122. package/lib/esm/data/data.heart-rate-min.js +0 -4
  123. package/lib/esm/data/data.heart-rate-used.js +0 -7
  124. package/lib/esm/data/data.heart-rate-zone-five-duration.js +0 -4
  125. package/lib/esm/data/data.heart-rate-zone-four-duration.js +0 -4
  126. package/lib/esm/data/data.heart-rate-zone-one-duration.js +0 -4
  127. package/lib/esm/data/data.heart-rate-zone-three-duration.js +0 -4
  128. package/lib/esm/data/data.heart-rate-zone-two-duration.js +0 -4
  129. package/lib/esm/data/data.heart-rate.js +0 -8
  130. package/lib/esm/data/data.ibi.js +0 -8
  131. package/lib/esm/data/data.interface.js +0 -5
  132. package/lib/esm/data/data.js +0 -62
  133. package/lib/esm/data/data.json.interface.js +0 -1
  134. package/lib/esm/data/data.latitude-degrees.js +0 -5
  135. package/lib/esm/data/data.left-balance.js +0 -4
  136. package/lib/esm/data/data.leg-stiffness.js +0 -16
  137. package/lib/esm/data/data.longitude-degrees.js +0 -5
  138. package/lib/esm/data/data.moving-time.js +0 -4
  139. package/lib/esm/data/data.number-of-satellites.js +0 -7
  140. package/lib/esm/data/data.number-of.samples.js +0 -4
  141. package/lib/esm/data/data.number.js +0 -13
  142. package/lib/esm/data/data.pace-avg.js +0 -8
  143. package/lib/esm/data/data.pace-max.js +0 -8
  144. package/lib/esm/data/data.pace-min.js +0 -8
  145. package/lib/esm/data/data.pace.js +0 -46
  146. package/lib/esm/data/data.pause.js +0 -4
  147. package/lib/esm/data/data.peak-epoc.js +0 -7
  148. package/lib/esm/data/data.peak-training-effect.js +0 -4
  149. package/lib/esm/data/data.percent.js +0 -4
  150. package/lib/esm/data/data.pool-length.js +0 -5
  151. package/lib/esm/data/data.position.interface.js +0 -1
  152. package/lib/esm/data/data.position.js +0 -18
  153. package/lib/esm/data/data.power-avg.js +0 -4
  154. package/lib/esm/data/data.power-down.js +0 -4
  155. package/lib/esm/data/data.power-intensity-factor.js +0 -5
  156. package/lib/esm/data/data.power-left.js +0 -4
  157. package/lib/esm/data/data.power-max.js +0 -4
  158. package/lib/esm/data/data.power-min.js +0 -4
  159. package/lib/esm/data/data.power-normalized.js +0 -4
  160. package/lib/esm/data/data.power-pedal-smoothness-left.js +0 -4
  161. package/lib/esm/data/data.power-pedal-smoothness-right.js +0 -4
  162. package/lib/esm/data/data.power-pod-used.js +0 -7
  163. package/lib/esm/data/data.power-right.js +0 -4
  164. package/lib/esm/data/data.power-torque-effectiveness-left.js +0 -4
  165. package/lib/esm/data/data.power-torque-effectiveness-right.js +0 -4
  166. package/lib/esm/data/data.power-training-stress-score.js +0 -5
  167. package/lib/esm/data/data.power-up.js +0 -4
  168. package/lib/esm/data/data.power-work.js +0 -5
  169. package/lib/esm/data/data.power-zone-five-duration.js +0 -4
  170. package/lib/esm/data/data.power-zone-four-duration.js +0 -4
  171. package/lib/esm/data/data.power-zone-one-duration.js +0 -4
  172. package/lib/esm/data/data.power-zone-three-duration.js +0 -4
  173. package/lib/esm/data/data.power-zone-two-duration.js +0 -4
  174. package/lib/esm/data/data.power.js +0 -8
  175. package/lib/esm/data/data.recovery-time.js +0 -7
  176. package/lib/esm/data/data.rider-position-change-event.js +0 -8
  177. package/lib/esm/data/data.right-balance.js +0 -4
  178. package/lib/esm/data/data.rpe.js +0 -23
  179. package/lib/esm/data/data.satellite-5-best-snr.js +0 -4
  180. package/lib/esm/data/data.sea-level-pressure.js +0 -5
  181. package/lib/esm/data/data.spec.js +0 -25
  182. package/lib/esm/data/data.speed-avg.js +0 -46
  183. package/lib/esm/data/data.speed-max.js +0 -46
  184. package/lib/esm/data/data.speed-min.js +0 -46
  185. package/lib/esm/data/data.speed-zone-five-duration.js +0 -4
  186. package/lib/esm/data/data.speed-zone-four-duration.js +0 -4
  187. package/lib/esm/data/data.speed-zone-one-duration.js +0 -4
  188. package/lib/esm/data/data.speed-zone-three-duration.js +0 -4
  189. package/lib/esm/data/data.speed-zone-two-duration.js +0 -4
  190. package/lib/esm/data/data.speed.js +0 -88
  191. package/lib/esm/data/data.sport-profile-name.js +0 -4
  192. package/lib/esm/data/data.stance-time.js +0 -5
  193. package/lib/esm/data/data.start-altitude.js +0 -4
  194. package/lib/esm/data/data.start-event.js +0 -4
  195. package/lib/esm/data/data.start-position.js +0 -4
  196. package/lib/esm/data/data.step-length.js +0 -4
  197. package/lib/esm/data/data.steps-old.js +0 -4
  198. package/lib/esm/data/data.steps.js +0 -4
  199. package/lib/esm/data/data.stop-all-event.js +0 -4
  200. package/lib/esm/data/data.stop-event.js +0 -4
  201. package/lib/esm/data/data.store.export.spec.js +0 -66
  202. package/lib/esm/data/data.store.js +0 -1213
  203. package/lib/esm/data/data.string.js +0 -13
  204. package/lib/esm/data/data.stryd-altitude.js +0 -4
  205. package/lib/esm/data/data.stryd-distance.js +0 -4
  206. package/lib/esm/data/data.stryd-speed.js +0 -4
  207. package/lib/esm/data/data.swim-pace-avg.js +0 -8
  208. package/lib/esm/data/data.swim-pace-max.js +0 -8
  209. package/lib/esm/data/data.swim-pace-min.js +0 -8
  210. package/lib/esm/data/data.swim-pace.js +0 -19
  211. package/lib/esm/data/data.swolf-25m.js +0 -4
  212. package/lib/esm/data/data.swolf-50m.js +0 -4
  213. package/lib/esm/data/data.target-distance.js +0 -4
  214. package/lib/esm/data/data.target-heart-rate-zone.js +0 -4
  215. package/lib/esm/data/data.target-power-zone.js +0 -4
  216. package/lib/esm/data/data.target-speed-zone.js +0 -4
  217. package/lib/esm/data/data.target-time.js +0 -4
  218. package/lib/esm/data/data.temperature-avg.js +0 -4
  219. package/lib/esm/data/data.temperature-max.js +0 -4
  220. package/lib/esm/data/data.temperature-min.js +0 -4
  221. package/lib/esm/data/data.temperature.js +0 -8
  222. package/lib/esm/data/data.time.js +0 -6
  223. package/lib/esm/data/data.timer-time.js +0 -4
  224. package/lib/esm/data/data.vertical-oscillation.js +0 -5
  225. package/lib/esm/data/data.vertical-ratio.js +0 -5
  226. package/lib/esm/data/data.vertical-speed-avg.js +0 -53
  227. package/lib/esm/data/data.vertical-speed-max.js +0 -53
  228. package/lib/esm/data/data.vertical-speed-min.js +0 -53
  229. package/lib/esm/data/data.vertical-speed.js +0 -103
  230. package/lib/esm/data/data.vo2-max.js +0 -7
  231. package/lib/esm/data/ibi/data.ibi.filters.js +0 -52
  232. package/lib/esm/data/ibi/data.ibi.js +0 -98
  233. package/lib/esm/data/ibi/data.ibi.spec.js +0 -66
  234. package/lib/esm/duration/duration.class.abstract.js +0 -36
  235. package/lib/esm/duration/duration.class.interface.js +0 -1
  236. package/lib/esm/errors/duration-exceeded-event-lib.error.js +0 -9
  237. package/lib/esm/errors/empty-event-sports-libs.error.js +0 -9
  238. package/lib/esm/errors/event-lib.error.js +0 -8
  239. package/lib/esm/errors/lib.error.js +0 -6
  240. package/lib/esm/errors/parsing-event-lib.error.js +0 -9
  241. package/lib/esm/events/adapters/exporters/exporter.gpx.js +0 -75
  242. package/lib/esm/events/adapters/exporters/exporter.interface.js +0 -1
  243. package/lib/esm/events/adapters/exporters/exporter.json.js +0 -20
  244. package/lib/esm/events/adapters/file-type.enum.js +0 -7
  245. package/lib/esm/events/adapters/importers/fit/importer.fit.ant-plus.device.names.js +0 -25
  246. package/lib/esm/events/adapters/importers/fit/importer.fit.coros.device.names.js +0 -5
  247. package/lib/esm/events/adapters/importers/fit/importer.fit.development.device.names.js +0 -4
  248. package/lib/esm/events/adapters/importers/fit/importer.fit.garmin.device.names.js +0 -462
  249. package/lib/esm/events/adapters/importers/fit/importer.fit.garmin.profile.data.js +0 -877
  250. package/lib/esm/events/adapters/importers/fit/importer.fit.garmin.profile.mapper.js +0 -106
  251. package/lib/esm/events/adapters/importers/fit/importer.fit.garmin.profile.mapper.spec.js +0 -32
  252. package/lib/esm/events/adapters/importers/fit/importer.fit.hammerhead.device.names.js +0 -4
  253. package/lib/esm/events/adapters/importers/fit/importer.fit.integration.spec.js +0 -44
  254. package/lib/esm/events/adapters/importers/fit/importer.fit.js +0 -978
  255. package/lib/esm/events/adapters/importers/fit/importer.fit.lezyne.device.names.js +0 -3
  256. package/lib/esm/events/adapters/importers/fit/importer.fit.magellan.device.names.js +0 -5
  257. package/lib/esm/events/adapters/importers/fit/importer.fit.mapper.js +0 -231
  258. package/lib/esm/events/adapters/importers/fit/importer.fit.saris.device.names.js +0 -3
  259. package/lib/esm/events/adapters/importers/fit/importer.fit.spec.js +0 -326
  260. package/lib/esm/events/adapters/importers/fit/importer.fit.srm.device.names.js +0 -7
  261. package/lib/esm/events/adapters/importers/fit/importer.fit.suunto.device.names.js +0 -16
  262. package/lib/esm/events/adapters/importers/fit/importer.fit.wahoo.device.names.js +0 -10
  263. package/lib/esm/events/adapters/importers/gpx/gx-parser.js +0 -36
  264. package/lib/esm/events/adapters/importers/gpx/importer.gpx.integration.spec.js +0 -44
  265. package/lib/esm/events/adapters/importers/gpx/importer.gpx.js +0 -102
  266. package/lib/esm/events/adapters/importers/gpx/importer.gpx.mapper.js +0 -142
  267. package/lib/esm/events/adapters/importers/gpx/importer.gpx.spec.js +0 -71
  268. package/lib/esm/events/adapters/importers/json/importer.json.js +0 -160
  269. package/lib/esm/events/adapters/importers/sample-info.interface.js +0 -1
  270. package/lib/esm/events/adapters/importers/suunto/importer.suunto.activity.ids.js +0 -85
  271. package/lib/esm/events/adapters/importers/suunto/importer.suunto.device.names.js +0 -26
  272. package/lib/esm/events/adapters/importers/suunto/importer.suunto.integration.spec.js +0 -44
  273. package/lib/esm/events/adapters/importers/suunto/importer.suunto.json.js +0 -717
  274. package/lib/esm/events/adapters/importers/suunto/importer.suunto.sml.js +0 -125
  275. package/lib/esm/events/adapters/importers/tcx/importer.tcx.integration.spec.js +0 -46
  276. package/lib/esm/events/adapters/importers/tcx/importer.tcx.js +0 -442
  277. package/lib/esm/events/adapters/importers/tcx/importer.tcx.mapper.js +0 -91
  278. package/lib/esm/events/adapters/importers/tcx/utils.tcx.js +0 -36
  279. package/lib/esm/events/event.interface.js +0 -1
  280. package/lib/esm/events/event.js +0 -123
  281. package/lib/esm/events/event.json.interface.js +0 -1
  282. package/lib/esm/events/event.spec.js +0 -51
  283. package/lib/esm/events/utilities/activity.utilities.js +0 -1841
  284. package/lib/esm/events/utilities/activity.utilities.spec.js +0 -373
  285. package/lib/esm/events/utilities/event.utilities.js +0 -57
  286. package/lib/esm/events/utilities/grade-calculator/grade-calculator.js +0 -121
  287. package/lib/esm/events/utilities/grade-calculator/grade-calculator.spec.js +0 -93
  288. package/lib/esm/events/utilities/grade-calculator/low-pass-filter.js +0 -86
  289. package/lib/esm/events/utilities/helpers.js +0 -162
  290. package/lib/esm/geodesy/adapters/adapter.interface.js +0 -1
  291. package/lib/esm/geodesy/adapters/geolib.adapter.js +0 -28
  292. package/lib/esm/id/id.abstract.class.js +0 -9
  293. package/lib/esm/id/id.class.interface.js +0 -1
  294. package/lib/esm/id/id.class.spec.js +0 -13
  295. package/lib/esm/intensity-zones/intensity-zones.interface.js +0 -1
  296. package/lib/esm/intensity-zones/intensity-zones.js +0 -29
  297. package/lib/esm/intensity-zones/intensity-zones.json.interface.js +0 -1
  298. package/lib/esm/intensity-zones/intensity-zones.spec.js +0 -30
  299. package/lib/esm/laps/lap.interface.js +0 -1
  300. package/lib/esm/laps/lap.js +0 -29
  301. package/lib/esm/laps/lap.json.interface.js +0 -1
  302. package/lib/esm/laps/lap.types.js +0 -52
  303. package/lib/esm/meta-data/event-meta-data.interface.js +0 -6
  304. package/lib/esm/meta-data/meta-data.js +0 -57
  305. package/lib/esm/meta-data/meta-data.json.interface.js +0 -1
  306. package/lib/esm/privacy/privacy.class.interface.js +0 -5
  307. package/lib/esm/serializable/serializable.class.interface.js +0 -1
  308. package/lib/esm/service-tokens/oauth1-service-token.interface.js +0 -1
  309. package/lib/esm/service-tokens/oauth2-service-token.interface.js +0 -1
  310. package/lib/esm/specs/activities-parsing.integration.spec.js +0 -1847
  311. package/lib/esm/specs/activity-duration-stream.integration.spec.js +0 -57
  312. package/lib/esm/specs/fixtures/streams/strava/rides/3171472783.json +0 -52534
  313. package/lib/esm/specs/fixtures/streams/strava/rides/3171487458.json +0 -78818
  314. package/lib/esm/specs/fixtures/streams/strava/rides/343080886.json +0 -105090
  315. package/lib/esm/specs/fixtures/streams/strava/rides/5910143591.json +0 -110711
  316. package/lib/esm/specs/fixtures/streams/strava/runs/2451375851.json +0 -74846
  317. package/lib/esm/specs/fixtures/streams/strava/runs/2709634581.json +0 -66817
  318. package/lib/esm/specs/fixtures/streams/strava/runs/3156040843.json +0 -17594
  319. package/lib/esm/specs/fixtures/streams/strava/runs/3182900697.json +0 -17322
  320. package/lib/esm/specs/fixtures/streams/strava/runs/3183465494.json +0 -20463
  321. package/lib/esm/specs/fixtures/streams/strava/runs/3183490558.json +0 -58202
  322. package/lib/esm/specs/spec-utils.js +0 -159
  323. package/lib/esm/specs/strava-streams-compliance.spec.js +0 -951
  324. package/lib/esm/stats/stats.class.abstract.js +0 -32
  325. package/lib/esm/stats/stats.class.interface.js +0 -1
  326. package/lib/esm/stats/stats.json.interface.js +0 -1
  327. package/lib/esm/streams/compressed.stream.interface.js +0 -12
  328. package/lib/esm/streams/ibi-stream.js +0 -43
  329. package/lib/esm/streams/low-pass.stream.filter.js +0 -9
  330. package/lib/esm/streams/stream.filter.interface.js +0 -1
  331. package/lib/esm/streams/stream.interface.js +0 -1
  332. package/lib/esm/streams/stream.js +0 -72
  333. package/lib/esm/streams/stream.spec.js +0 -168
  334. package/lib/esm/tiles/tile.settings.interface.js +0 -41
  335. package/lib/esm/users/settings/dashboard/user.dashboard.settings.interface.js +0 -13
  336. package/lib/esm/users/settings/user.app.settings.interface.js +0 -5
  337. package/lib/esm/users/settings/user.chart.settings.interface.js +0 -23
  338. package/lib/esm/users/settings/user.map.settings.interface.js +0 -22
  339. package/lib/esm/users/settings/user.my-tracks.settings.interface.js +0 -1
  340. package/lib/esm/users/settings/user.settings.interface.js +0 -1
  341. package/lib/esm/users/settings/user.stats-settings.interface.js +0 -1
  342. package/lib/esm/users/settings/user.summaries.settings.interface.js +0 -1
  343. package/lib/esm/users/settings/user.unit.settings.interface.js +0 -73
  344. package/lib/esm/users/user.account.privileges.interface.js +0 -1
  345. package/lib/esm/users/user.export-to-csv.settings.interface.js +0 -1
  346. package/lib/esm/users/user.interface.js +0 -1
  347. package/lib/esm/users/user.js +0 -38
  348. package/lib/esm/users/user.service.meta.interface.js +0 -1
  349. package/tsconfig.cjs.json +0 -7
  350. package/tsconfig.esm.json +0 -8
  351. package/tsconfig.lib.json +0 -8
@@ -1,717 +0,0 @@
1
- import { Event } from '../../../event';
2
- import { Activity } from '../../../../activities/activity';
3
- import { Creator } from '../../../../creators/creator';
4
- import { Lap } from '../../../../laps/lap';
5
- import { DataAltitude } from '../../../../data/data.altitude';
6
- import { DataCadence } from '../../../../data/data.cadence';
7
- import { DataHeartRate } from '../../../../data/data.heart-rate';
8
- import { DataSpeed } from '../../../../data/data.speed';
9
- import { DataVerticalSpeed } from '../../../../data/data.vertical-speed';
10
- import { DataTemperature } from '../../../../data/data.temperature';
11
- import { DataSeaLevelPressure } from '../../../../data/data.sea-level-pressure';
12
- import { DataLatitudeDegrees } from '../../../../data/data.latitude-degrees';
13
- import { DataLongitudeDegrees } from '../../../../data/data.longitude-degrees';
14
- import { DataPower } from '../../../../data/data.power';
15
- import { DataGPSAltitude } from '../../../../data/data.altitude-gps';
16
- import { DataAbsolutePressure } from '../../../../data/data.absolute-pressure';
17
- import { DataEHPE } from '../../../../data/data.ehpe';
18
- import { DataEVPE } from '../../../../data/data.evpe';
19
- import { DataNumberOfSatellites } from '../../../../data/data.number-of-satellites';
20
- import { DataSatellite5BestSNR } from '../../../../data/data.satellite-5-best-snr';
21
- import { IntensityZones } from '../../../../intensity-zones/intensity-zones';
22
- import { IBIData } from '../../../../data/ibi/data.ibi';
23
- import { ImporterSuuntoActivityIds } from './importer.suunto.activity.ids';
24
- import { ImporterSuuntoDeviceNames } from './importer.suunto.device.names';
25
- import { DataDuration } from '../../../../data/data.duration';
26
- import { DataAltitudeMax } from '../../../../data/data.altitude-max';
27
- import { DataDistance } from '../../../../data/data.distance';
28
- import { DataAscentTime } from '../../../../data/data.ascent-time';
29
- import { DataDescentTime } from '../../../../data/data.descent-time';
30
- import { DataDescent } from '../../../../data/data.descent';
31
- import { DataAscent } from '../../../../data/data.ascent';
32
- import { DataEPOC } from '../../../../data/data.epoc';
33
- import { DataEnergy } from '../../../../data/data.energy';
34
- import { DataFeeling } from '../../../../data/data.feeling';
35
- import { DataRecoveryTime } from '../../../../data/data.recovery-time';
36
- import { DataVO2Max } from '../../../../data/data.vo2-max';
37
- import { DataPause } from '../../../../data/data.pause';
38
- import { DataHeartRateAvg } from '../../../../data/data.heart-rate-avg';
39
- import { DataHeartRateMax } from '../../../../data/data.heart-rate-max';
40
- import { DataHeartRateMin } from '../../../../data/data.heart-rate-min';
41
- import { DataCadenceAvg } from '../../../../data/data.cadence-avg';
42
- import { DataCadenceMax } from '../../../../data/data.cadence-max';
43
- import { DataCadenceMin } from '../../../../data/data.cadence-min';
44
- import { DataPowerAvg } from '../../../../data/data.power-avg';
45
- import { DataPowerMax } from '../../../../data/data.power-max';
46
- import { DataPowerMin } from '../../../../data/data.power-min';
47
- import { DataSpeedAvg } from '../../../../data/data.speed-avg';
48
- import { DataSpeedMax } from '../../../../data/data.speed-max';
49
- import { DataSpeedMin } from '../../../../data/data.speed-min';
50
- import { DataTemperatureAvg } from '../../../../data/data.temperature-avg';
51
- import { DataTemperatureMax } from '../../../../data/data.temperature-max';
52
- import { DataTemperatureMin } from '../../../../data/data.temperature-min';
53
- import { DataVerticalSpeedAvg } from '../../../../data/data.vertical-speed-avg';
54
- import { DataVerticalSpeedMax } from '../../../../data/data.vertical-speed-max';
55
- import { DataVerticalSpeedMin } from '../../../../data/data.vertical-speed-min';
56
- import { DataAltitudeAvg } from '../../../../data/data.altitude-avg';
57
- import { DataAltitudeMin } from '../../../../data/data.altitude-min';
58
- import { DataFusedLocation } from '../../../../data/data.fused-location';
59
- import { ActivityTypes } from '../../../../activities/activity.types';
60
- import { LapTypes } from '../../../../laps/lap.types';
61
- import { DataPaceAvg } from '../../../../data/data.pace-avg';
62
- import { DataPaceMax } from '../../../../data/data.pace-max';
63
- import { DataPaceMin } from '../../../../data/data.pace-min';
64
- import { DataFusedAltitude } from '../../../../data/data.fused-altitude';
65
- import { DataBatteryCharge } from '../../../../data/data.battery-charge';
66
- import { DataBatteryCurrent } from '../../../../data/data.battery-current';
67
- import { DataBatteryVoltage } from '../../../../data/data.battery-voltage';
68
- import { convertSpeedToPace, isNumber, isNumberOrString } from '../../../utilities/helpers';
69
- import { EventUtilities } from '../../../utilities/event.utilities';
70
- import { DataAltiBaroProfile } from '../../../../data/data.alti-baro-profile';
71
- import { DataAutoLapDistance } from '../../../../data/data.auto-lap-distance';
72
- import { DataAutoLapDuration } from '../../../../data/data.auto-lap-duration';
73
- import { DataAutoPauseUsed } from '../../../../data/data.auto-pause-used';
74
- import { DataBikePodUsed } from '../../../../data/data.bike-pod-used';
75
- import { DataEnabledNavigationSystems } from '../../../../data/data.enabled-navigation-systems';
76
- import { DataFootPodUsed } from '../../../../data/data.foot-pod-used';
77
- import { DataHeartRateUsed } from '../../../../data/data.heart-rate-used';
78
- import { DataPowerPodUsed } from '../../../../data/data.power-pod-used';
79
- import { DynamicDataLoader } from '../../../../data/data.store';
80
- import { IBIStream } from '../../../../streams/ibi-stream';
81
- import { DataSteps } from '../../../../data/data.steps';
82
- import { DataPoolLength } from '../../../../data/data.pool-length';
83
- import { DataDeviceLocation } from '../../../../data/data.device-location';
84
- import { DataAerobicTrainingEffect } from '../../../../data/data-aerobic-training-effect';
85
- import { DataHeartRateZoneOneDuration } from '../../../../data/data.heart-rate-zone-one-duration';
86
- import { DataHeartRateZoneTwoDuration } from '../../../../data/data.heart-rate-zone-two-duration';
87
- import { DataHeartRateZoneThreeDuration } from '../../../../data/data.heart-rate-zone-three-duration';
88
- import { DataHeartRateZoneFourDuration } from '../../../../data/data.heart-rate-zone-four-duration';
89
- import { DataHeartRateZoneFiveDuration } from '../../../../data/data.heart-rate-zone-five-duration';
90
- import { DataPowerZoneOneDuration } from '../../../../data/data.power-zone-one-duration';
91
- import { DataPowerZoneTwoDuration } from '../../../../data/data.power-zone-two-duration';
92
- import { DataPowerZoneThreeDuration } from '../../../../data/data.power-zone-three-duration';
93
- import { DataPowerZoneFourDuration } from '../../../../data/data.power-zone-four-duration';
94
- import { DataPowerZoneFiveDuration } from '../../../../data/data.power-zone-five-duration';
95
- import { DataSpeedZoneOneDuration } from '../../../../data/data.speed-zone-one-duration';
96
- import { DataSpeedZoneTwoDuration } from '../../../../data/data.speed-zone-two-duration';
97
- import { DataSpeedZoneThreeDuration } from '../../../../data/data.speed-zone-three-duration';
98
- import { DataSpeedZoneFourDuration } from '../../../../data/data.speed-zone-four-duration';
99
- import { DataSpeedZoneFiveDuration } from '../../../../data/data.speed-zone-five-duration';
100
- import { FileType } from '../../file-type.enum';
101
- import { ActivityParsingOptions } from '../../../../activities/activity-parsing-options';
102
- export class EventImporterSuuntoJSON {
103
- static getFromJSONString(jsonString, options = ActivityParsingOptions.DEFAULT) {
104
- return new Promise((resolve, reject) => {
105
- const eventJSONObject = JSON.parse(jsonString);
106
- // debugger;
107
- // Create a creator and pass it to all activities (later)
108
- const creator = new Creator(ImporterSuuntoDeviceNames[eventJSONObject.DeviceLog.Device.Name] || // Try to get a listed name
109
- eventJSONObject.DeviceLog.Device.Name // If not fallback to typed
110
- );
111
- creator.serialNumber = eventJSONObject.DeviceLog.Device.SerialNumber;
112
- creator.hwInfo = eventJSONObject.DeviceLog.Device.Info.HW;
113
- creator.swInfo = eventJSONObject.DeviceLog.Device.Info.SW;
114
- // Go over the samples and get the ones with activity start times
115
- const activityStartEventSamples = eventJSONObject.DeviceLog.Samples.filter((sample) => {
116
- return sample.Events && sample.Events[0] && sample.Events[0].Activity;
117
- });
118
- // Check if there is a Fused Altitude event
119
- const fusedAltitudeEventSamples = eventJSONObject.DeviceLog.Samples.filter((sample) => {
120
- return sample.Events && sample.Events[0] && sample.Events[0].Altitude;
121
- });
122
- // Get the lap start events
123
- const lapEventSamples = eventJSONObject.DeviceLog.Samples.filter((sample) => {
124
- return (sample.Events &&
125
- sample.Events[0] &&
126
- sample.Events[0].Lap &&
127
- sample.Events[0].Lap.Type !== 'Start' &&
128
- sample.Events[0].Lap.Type !== 'Stop');
129
- });
130
- // Get the stop event
131
- const stopEventSample = eventJSONObject.DeviceLog.Samples.find((sample) => {
132
- return sample.Events && sample.Events[0] && sample.Events[0].Lap && sample.Events[0].Lap.Type === 'Stop';
133
- });
134
- // Add the stop event to the laps since it's also a lap stop event
135
- if (stopEventSample) {
136
- lapEventSamples.push(stopEventSample);
137
- }
138
- // Get the activity windows
139
- const activityWindows = eventJSONObject.DeviceLog.Windows
140
- ? eventJSONObject.DeviceLog.Windows.filter((windowObj) => {
141
- return windowObj.Window.Type === 'Activity';
142
- }).map((activityWindow) => activityWindow.Window)
143
- : [];
144
- // Get the lap windows
145
- const lapWindows = eventJSONObject.DeviceLog.Windows
146
- ? eventJSONObject.DeviceLog.Windows.filter((windowObj) => {
147
- return windowObj.Window.Type === 'Lap' || windowObj.Window.Type === 'Autolap';
148
- }).map((lapWindow) => lapWindow.Window)
149
- : [];
150
- // Create the activities
151
- const activities = activityStartEventSamples.map((activityStartEventSample, index) => {
152
- const activity = new Activity(new Date(activityStartEventSample.TimeISO8601), activityStartEventSamples.length - 1 === index
153
- ? new Date(stopEventSample ? stopEventSample.TimeISO8601 : (eventJSONObject.DeviceLog.Header.TimeISO8601 || eventJSONObject.DeviceLog.Header.DateTime))
154
- : new Date(activityStartEventSamples[index + 1].TimeISO8601), ActivityTypes[(ImporterSuuntoActivityIds[activityStartEventSample.Events[0].Activity.ActivityType])], creator, options);
155
- // Set the end date to the stop event time if the activity is the last or the only one else set it on the next itery time
156
- // Create the stats these are a 1:1 ref arrays
157
- if (activityWindows[index]) {
158
- this.getStats(activityWindows[index]).forEach(stat => {
159
- activity.addStat(stat);
160
- });
161
- }
162
- // Add the pause from end date minurs start date and removing the duration as widows do not contain the pause time
163
- if (!activity.getDuration()) {
164
- activity.setDuration(new DataDuration((activity.endDate.getTime() - activity.startDate.getTime()) / 1000));
165
- }
166
- activity.setPause(new DataPause((activity.endDate.getTime() - activity.startDate.getTime()) / 1000 - activity.getDuration().getValue()));
167
- // Set the zones for the activity @todo fix
168
- this.setIntensityZones(activity, eventJSONObject.DeviceLog.Header);
169
- // Add the fused altitude event
170
- if (fusedAltitudeEventSamples.length) {
171
- activity.addStat(new DataFusedAltitude(true));
172
- }
173
- return activity;
174
- });
175
- // If nothing found
176
- if (!activities.length) {
177
- activities.push(new Activity(new Date(eventJSONObject.DeviceLog.Header.DateTime), new Date(new Date(eventJSONObject.DeviceLog.Header.DateTime).getTime() +
178
- eventJSONObject.DeviceLog.Header.Duration * 1000), ActivityTypes.unknown, creator, options));
179
- }
180
- // set the start dates of all lap types to the start of the first activity
181
- const lapStartDatesByType = lapEventSamples.reduce((lapStartDatesByTypeObject, lapEventSample, index) => {
182
- // If its a stop event then set the start date to the previous
183
- if (lapEventSample.Events[0].Lap.Type === 'Stop' && lapEventSamples.length > 1) {
184
- lapStartDatesByTypeObject[lapEventSample.Events[0].Lap.Type] = new Date(lapEventSamples[index - 1].TimeISO8601);
185
- return lapStartDatesByTypeObject;
186
- }
187
- lapStartDatesByTypeObject[lapEventSample.Events[0].Lap.Type] = activities[0].startDate;
188
- return lapStartDatesByTypeObject;
189
- }, {});
190
- const laps = lapEventSamples.reduce((lapArray, lapEventSample, lapIndex) => {
191
- // if there is only one lap then skip it's the whole activity
192
- if (lapEventSamples.length === 1) {
193
- return lapArray;
194
- }
195
- // Set the end date
196
- const lapEndDate = new Date(lapEventSample.TimeISO8601);
197
- // Set the start date.
198
- // Set it for the next run
199
- const lap = new Lap(lapStartDatesByType[lapEventSample.Events[0].Lap.Type], lapEndDate, lapIndex + 1, LapTypes[lapEventSample.Events[0].Lap.Type]);
200
- lapStartDatesByType[lapEventSample.Events[0].Lap.Type] = lapEndDate;
201
- if (lapWindows[lapIndex]) {
202
- this.getStats(lapWindows[lapIndex]).forEach(stat => {
203
- lap.addStat(stat);
204
- });
205
- }
206
- // Add the pause from end date minurs start date and removing the duration as widows do not contain the pause time
207
- if (!lap.getDuration()) {
208
- lap.setDuration(new DataDuration((lap.endDate.getTime() - lap.startDate.getTime()) / 1000));
209
- }
210
- lap.setPause(new DataPause((lap.endDate.getTime() - lap.startDate.getTime()) / 1000 - lap.getDuration().getValue()));
211
- lapArray.push(lap);
212
- return lapArray;
213
- }, []);
214
- // Add the laps to the belonging activity. If a lap starts or stops at the activity date delta then it belong to the acitvity
215
- // @todo move laps to event so we don't have cross border laps to acivities and decouple them
216
- activities.forEach((activity) => {
217
- laps
218
- .filter((lap) => {
219
- // If the lap start belongs to the activity
220
- if (lap.startDate <= activity.endDate && lap.startDate >= activity.startDate) {
221
- return true;
222
- }
223
- // if the lap end belongs also...
224
- if (lap.endDate >= activity.startDate && lap.endDate <= activity.endDate) {
225
- return true;
226
- }
227
- return false;
228
- })
229
- .forEach((activityLap) => {
230
- activity.addLap(activityLap);
231
- });
232
- });
233
- // Add the samples that belong to the activity and the ibi data.
234
- activities.forEach((activity) => {
235
- // Get the samples that belong to this activity
236
- const activitySamples = eventJSONObject.DeviceLog.Samples.filter((sample) => new Date(sample.TimeISO8601) >= activity.startDate && new Date(sample.TimeISO8601) <= activity.endDate);
237
- // debugger;
238
- // Check if there is fused Location
239
- activity.addStat(new DataFusedLocation(false));
240
- activity.addStat(new DataFusedLocation(activitySamples.filter((sample) => this.hasFusedLocData(sample)).length > 0));
241
- // Should filter on type and create the samples
242
- this.setStreamsForActivity(activity, activitySamples);
243
- });
244
- // Add the ibiData
245
- if (eventJSONObject.DeviceLog['R-R'] && eventJSONObject.DeviceLog['R-R'].Data) {
246
- // prepare the data array per activity removing the offset
247
- activities.forEach((activity) => {
248
- let timeSum = 0;
249
- const ibiData = eventJSONObject.DeviceLog['R-R'].Data.filter((ibi) => {
250
- timeSum += ibi;
251
- const ibiDataDate = new Date(activities[0].startDate.getTime() + timeSum);
252
- return ibiDataDate >= activity.startDate && ibiDataDate <= activity.endDate;
253
- });
254
- // set the HR
255
- // @todo perhaps create new 'types'
256
- const existingHRStream = activity.getAllStreams().find(stream => stream.type === DataHeartRate.type);
257
- if (existingHRStream) {
258
- activity.removeStream(existingHRStream);
259
- }
260
- this.setStreamsForActivity(activity, this.getHRSamplesFromIBIData(activity, ibiData));
261
- activity.addStream(new IBIStream(ibiData));
262
- });
263
- }
264
- // Create an event
265
- // @todo check if start and end date can derive from the json
266
- const event = new Event('', activities[0].startDate, activities[activities.length - 1].endDate, FileType.SUUNTO);
267
- activities.forEach(activity => event.addActivity(activity));
268
- // Populate the event stats from the Header Object // @todo maybe remove
269
- this.getStats(eventJSONObject.DeviceLog.Header).forEach(stat => {
270
- event.addStat(stat);
271
- });
272
- // Get the settings and add it to all activities as it's logical
273
- if (eventJSONObject.DeviceLog.Header.Settings) {
274
- this.getSettings(eventJSONObject.DeviceLog.Header.Settings).forEach(stat => {
275
- event.getActivities().forEach(activity => activity.addStat(stat));
276
- });
277
- }
278
- if (activities.length === 1) {
279
- const stats = this.getStats(eventJSONObject.DeviceLog.Header).filter(stat => stat instanceof DataSteps ||
280
- stat instanceof DataVO2Max ||
281
- stat instanceof DataDeviceLocation ||
282
- stat instanceof DataPoolLength);
283
- stats.forEach(stat => activities[0].addStat(stat));
284
- }
285
- // @todo see how we can have those event stats persisted as the below generation wipes those off.
286
- // Generate stats
287
- EventUtilities.generateStatsForAll(event);
288
- resolve(event);
289
- });
290
- }
291
- static hasFusedLocData(sample) {
292
- return !!sample.Inertial || !!sample.GpsRef;
293
- }
294
- static setIntensityZones(activity, object) {
295
- SuuntoIntensityZonesMapper.forEach(intensityZonesMap => {
296
- if (!object[intensityZonesMap.sampleField]) {
297
- return;
298
- }
299
- const zones = new IntensityZones(intensityZonesMap.dataType);
300
- zones.zone1Duration = object[intensityZonesMap.sampleField].Zone1Duration;
301
- zones.zone2Duration = object[intensityZonesMap.sampleField].Zone2Duration;
302
- zones.zone2LowerLimit = intensityZonesMap.convertSampleValue(object[intensityZonesMap.sampleField].Zone2LowerLimit);
303
- zones.zone3Duration = object[intensityZonesMap.sampleField].Zone3Duration;
304
- zones.zone3LowerLimit = intensityZonesMap.convertSampleValue(object[intensityZonesMap.sampleField].Zone3LowerLimit);
305
- zones.zone4Duration = object[intensityZonesMap.sampleField].Zone4Duration;
306
- zones.zone4LowerLimit = intensityZonesMap.convertSampleValue(object[intensityZonesMap.sampleField].Zone4LowerLimit);
307
- zones.zone5Duration = object[intensityZonesMap.sampleField].Zone5Duration;
308
- zones.zone5LowerLimit = intensityZonesMap.convertSampleValue(object[intensityZonesMap.sampleField].Zone5LowerLimit);
309
- activity.intensityZones.push(zones);
310
- switch (intensityZonesMap.dataType) {
311
- case DataHeartRate.type:
312
- activity.addStat(new DataHeartRateZoneOneDuration(zones.zone1Duration));
313
- activity.addStat(new DataHeartRateZoneTwoDuration(zones.zone2Duration));
314
- activity.addStat(new DataHeartRateZoneThreeDuration(zones.zone3Duration));
315
- activity.addStat(new DataHeartRateZoneFourDuration(zones.zone4Duration));
316
- activity.addStat(new DataHeartRateZoneFiveDuration(zones.zone5Duration));
317
- break;
318
- case DataPower.type:
319
- activity.addStat(new DataPowerZoneOneDuration(zones.zone1Duration));
320
- activity.addStat(new DataPowerZoneTwoDuration(zones.zone2Duration));
321
- activity.addStat(new DataPowerZoneThreeDuration(zones.zone3Duration));
322
- activity.addStat(new DataPowerZoneFourDuration(zones.zone4Duration));
323
- activity.addStat(new DataPowerZoneFiveDuration(zones.zone5Duration));
324
- break;
325
- case DataSpeed.type:
326
- activity.addStat(new DataSpeedZoneOneDuration(zones.zone1Duration));
327
- activity.addStat(new DataSpeedZoneTwoDuration(zones.zone2Duration));
328
- activity.addStat(new DataSpeedZoneThreeDuration(zones.zone3Duration));
329
- activity.addStat(new DataSpeedZoneFourDuration(zones.zone4Duration));
330
- activity.addStat(new DataSpeedZoneFiveDuration(zones.zone5Duration));
331
- break;
332
- }
333
- });
334
- }
335
- static getHRSamplesFromIBIData(activity, ibiData) {
336
- // activity.ibiData = new IBIData(ibiData);
337
- // @todo optimize
338
- // Create a second IBIData so we can have filtering on those with keeping the original
339
- const samples = [];
340
- new IBIData(ibiData)
341
- .lowLimitBPMFilter()
342
- .highLimitBPMFilter()
343
- .movingMedianFilter()
344
- .lowPassFilter()
345
- .getAsBPM()
346
- .forEach((value, key, map) => {
347
- samples.push({
348
- TimeISO8601: new Date(activity.startDate.getTime() + key).toISOString(),
349
- HR: value / 60
350
- });
351
- });
352
- return samples;
353
- }
354
- static setStreamsForActivity(activity, samples) {
355
- SuuntoSampleMapper.forEach(sampleMapping => {
356
- const subjectSamples = samples.filter(sample => isNumberOrString(sample[sampleMapping.sampleField]));
357
- if (subjectSamples.length) {
358
- activity.addStream(activity.createStream(sampleMapping.dataType));
359
- subjectSamples.forEach(subjectSample => {
360
- activity.addDataToStream(sampleMapping.dataType, new Date(subjectSample.TimeISO8601), sampleMapping.convertSampleValue(subjectSample[sampleMapping.sampleField]));
361
- });
362
- }
363
- });
364
- }
365
- static getSettings(settings) {
366
- const stats = [];
367
- SuuntoSettingsMapper.forEach(settingsMapping => {
368
- if (settingsMapping.getValue(settings) !== null && settingsMapping.getValue(settings) !== undefined) {
369
- stats.push(DynamicDataLoader.getDataInstanceFromDataType(settingsMapping.dataType, settingsMapping.getValue(settings)));
370
- }
371
- });
372
- return stats;
373
- }
374
- // @todo convert this to a mapping as well
375
- static getStats(object) {
376
- const stats = [];
377
- if (isNumber(object.Distance)) {
378
- stats.push(new DataDistance(object.Distance));
379
- }
380
- if (isNumberOrString(object.AscentTime)) {
381
- stats.push(new DataAscentTime(object.AscentTime));
382
- }
383
- if (isNumberOrString(object.DescentTime)) {
384
- stats.push(new DataDescentTime(object.DescentTime));
385
- }
386
- if (isNumberOrString(object.Ascent)) {
387
- stats.push(new DataAscent(object.Ascent));
388
- }
389
- if (isNumberOrString(object.Descent)) {
390
- stats.push(new DataDescent(object.Descent));
391
- }
392
- if (isNumberOrString(object.StepCount)) {
393
- stats.push(new DataSteps(object.StepCount));
394
- }
395
- if (isNumberOrString(object.MAXVO2)) {
396
- stats.push(new DataVO2Max(object.MAXVO2));
397
- }
398
- if (isNumberOrString(object.PoolLength)) {
399
- stats.push(new DataPoolLength(object.PoolLength));
400
- }
401
- if (isNumberOrString(object.DeviceLocation)) {
402
- stats.push(new DataDeviceLocation(object.DeviceLocation));
403
- }
404
- if (isNumberOrString(object.EPOC)) {
405
- stats.push(new DataEPOC(object.EPOC));
406
- }
407
- if (isNumberOrString(object.Energy)) {
408
- stats.push(new DataEnergy((object.Energy * 0.239) / 1000));
409
- }
410
- if (isNumberOrString(object.Feeling)) {
411
- stats.push(new DataFeeling(object.Feeling));
412
- }
413
- if (isNumberOrString(object.PeakTrainingEffect)) {
414
- stats.push(new DataAerobicTrainingEffect(object.PeakTrainingEffect));
415
- }
416
- if (isNumberOrString(object.RecoveryTime)) {
417
- stats.push(new DataRecoveryTime(object.RecoveryTime));
418
- }
419
- if (isNumberOrString(object.MAXVO2)) {
420
- stats.push(new DataVO2Max(object.MAXVO2));
421
- }
422
- let pauseDuration = 0;
423
- if (isNumberOrString(object.PauseDuration)) {
424
- pauseDuration = object.PauseDuration;
425
- }
426
- stats.push(new DataPause(pauseDuration));
427
- stats.push(new DataDuration(object.Duration - pauseDuration));
428
- // double case
429
- if (Array.isArray(object.Altitude)) {
430
- if (isNumber(object.Altitude[0].Avg)) {
431
- stats.push(new DataAltitudeAvg(object.Altitude[0].Avg));
432
- }
433
- if (isNumber(object.Altitude[0].Max)) {
434
- stats.push(new DataAltitudeMax(object.Altitude[0].Max));
435
- }
436
- if (isNumber(object.Altitude[0].Min)) {
437
- stats.push(new DataAltitudeMin(object.Altitude[0].Min));
438
- }
439
- }
440
- else if (object.Altitude) {
441
- if (isNumber(object.Altitude.Max)) {
442
- stats.push(new DataAltitudeMax(object.Altitude.Max));
443
- }
444
- if (isNumber(object.Altitude.Min)) {
445
- stats.push(new DataAltitudeMin(object.Altitude.Min));
446
- }
447
- }
448
- if (Array.isArray(object.HR)) {
449
- if (isNumber(object.HR[0].Avg)) {
450
- stats.push(new DataHeartRateAvg(object.HR[0].Avg * 60));
451
- }
452
- if (isNumber(object.HR[0].Max)) {
453
- stats.push(new DataHeartRateMax(object.HR[0].Max * 60));
454
- }
455
- if (isNumber(object.HR[0].Min)) {
456
- stats.push(new DataHeartRateMin(object.HR[0].Min * 60));
457
- }
458
- }
459
- if (Array.isArray(object.Cadence)) {
460
- if (isNumber(object.Cadence[0].Avg)) {
461
- stats.push(new DataCadenceAvg(object.Cadence[0].Avg * 60));
462
- }
463
- if (isNumber(object.Cadence[0].Max)) {
464
- stats.push(new DataCadenceMax(object.Cadence[0].Max * 60));
465
- }
466
- if (isNumber(object.Cadence[0].Min)) {
467
- stats.push(new DataCadenceMin(object.Cadence[0].Min * 60));
468
- }
469
- }
470
- if (Array.isArray(object.Power)) {
471
- if (isNumber(object.Power[0].Avg)) {
472
- stats.push(new DataPowerAvg(object.Power[0].Avg));
473
- }
474
- if (isNumber(object.Power[0].Max)) {
475
- stats.push(new DataPowerMax(object.Power[0].Max));
476
- }
477
- if (isNumber(object.Power[0].Min)) {
478
- stats.push(new DataPowerMin(object.Power[0].Min));
479
- }
480
- }
481
- if (Array.isArray(object.Speed)) {
482
- if (isNumber(object.Speed[0].Avg)) {
483
- stats.push(new DataSpeedAvg(object.Speed[0].Avg));
484
- stats.push(new DataPaceAvg(convertSpeedToPace(object.Speed[0].Avg)));
485
- }
486
- if (isNumber(object.Speed[0].Max)) {
487
- stats.push(new DataSpeedMax(object.Speed[0].Max));
488
- stats.push(new DataPaceMax(convertSpeedToPace(object.Speed[0].Max)));
489
- }
490
- if (isNumber(object.Speed[0].Min)) {
491
- stats.push(new DataSpeedMin(object.Speed[0].Min));
492
- stats.push(new DataPaceMin(convertSpeedToPace(object.Speed[0].Min)));
493
- }
494
- }
495
- if (Array.isArray(object.Temperature)) {
496
- if (isNumber(object.Temperature[0].Avg)) {
497
- stats.push(new DataTemperatureAvg(object.Temperature[0].Avg - 273.15));
498
- }
499
- if (isNumber(object.Temperature[0].Max)) {
500
- stats.push(new DataTemperatureMax(object.Temperature[0].Max - 273.15));
501
- }
502
- if (object.Temperature[0].Min !== null) {
503
- stats.push(new DataTemperatureMin(object.Temperature[0].Min - 273.15));
504
- }
505
- }
506
- if (object.hasOwnProperty('VerticalSpeed')) {
507
- // Double action here
508
- if (Array.isArray(object.VerticalSpeed)) {
509
- if (isNumber(object.VerticalSpeed[0].Avg)) {
510
- stats.push(new DataVerticalSpeedAvg(object.VerticalSpeed[0].Avg));
511
- }
512
- if (isNumber(object.VerticalSpeed[0].Max)) {
513
- stats.push(new DataVerticalSpeedMax(object.VerticalSpeed[0].Max));
514
- }
515
- if (isNumber(object.VerticalSpeed[0].Min)) {
516
- stats.push(new DataVerticalSpeedMin(object.VerticalSpeed[0].Min));
517
- }
518
- }
519
- else {
520
- if (isNumber(object.VerticalSpeed)) {
521
- stats.push(new DataVerticalSpeedAvg(object.VerticalSpeed));
522
- }
523
- }
524
- }
525
- return stats;
526
- }
527
- }
528
- export const SuuntoSettingsMapper = [
529
- {
530
- dataType: DataAltiBaroProfile.type,
531
- getValue: (settings) => {
532
- return settings['AltiBaroProfile'];
533
- }
534
- },
535
- {
536
- dataType: DataAutoLapDistance.type,
537
- getValue: (settings) => {
538
- if (!settings['AutoLap']) {
539
- return null;
540
- }
541
- return settings['AutoLap']['Distance'];
542
- }
543
- },
544
- {
545
- dataType: DataAutoLapDuration.type,
546
- getValue: (settings) => {
547
- if (!settings['AutoLap']) {
548
- return null;
549
- }
550
- return settings['AutoLap']['Duration'];
551
- }
552
- },
553
- {
554
- dataType: DataAutoPauseUsed.type,
555
- getValue: (settings) => {
556
- if (!settings['AutoPause']) {
557
- return null;
558
- }
559
- return settings['AutoPause']['Enabled'];
560
- }
561
- },
562
- {
563
- dataType: DataBikePodUsed.type,
564
- getValue: (settings) => {
565
- return settings['BikePodUsed'];
566
- }
567
- },
568
- {
569
- dataType: DataEnabledNavigationSystems.type,
570
- getValue: (settings) => {
571
- return settings['EnabledNavigationSystems'];
572
- }
573
- },
574
- {
575
- dataType: DataFootPodUsed.type,
576
- getValue: (settings) => {
577
- return settings['FootPodUsed'];
578
- }
579
- },
580
- // {
581
- // dataType: DataFusedAltitude.type,
582
- // getValue: (settings: any) => {
583
- // return settings['FusedAltiUsed'];
584
- // },
585
- // },
586
- {
587
- dataType: DataHeartRateUsed.type,
588
- getValue: (settings) => {
589
- return settings['HrUsed'];
590
- }
591
- },
592
- {
593
- dataType: DataPowerPodUsed.type,
594
- getValue: (settings) => {
595
- return settings['PowerPodUsed'];
596
- }
597
- }
598
- ];
599
- export const SuuntoIntensityZonesMapper = [
600
- {
601
- dataType: DataHeartRate.type,
602
- sampleField: 'HrZones',
603
- convertSampleValue: (value) => Number(value * 60)
604
- },
605
- {
606
- dataType: DataPower.type,
607
- sampleField: 'PowerZones',
608
- convertSampleValue: (value) => Number(value)
609
- },
610
- {
611
- dataType: DataSpeed.type,
612
- sampleField: 'SpeedZones',
613
- convertSampleValue: (value) => Number(value)
614
- }
615
- ];
616
- export const SuuntoSampleMapper = [
617
- {
618
- dataType: DataLatitudeDegrees.type,
619
- sampleField: 'Latitude',
620
- convertSampleValue: (value) => Number(value * (180 / Math.PI))
621
- },
622
- {
623
- dataType: DataLongitudeDegrees.type,
624
- sampleField: 'Longitude',
625
- convertSampleValue: (value) => Number(value * (180 / Math.PI))
626
- },
627
- {
628
- dataType: DataHeartRate.type,
629
- sampleField: 'HR',
630
- convertSampleValue: (value) => Number(value * 60)
631
- },
632
- {
633
- dataType: DataDistance.type,
634
- sampleField: 'Distance',
635
- convertSampleValue: (value) => Number(value)
636
- },
637
- {
638
- dataType: DataAbsolutePressure.type,
639
- sampleField: 'AbsPressure',
640
- convertSampleValue: (value) => Number(value / 100)
641
- },
642
- {
643
- dataType: DataSeaLevelPressure.type,
644
- sampleField: 'SeaLevelPressure',
645
- convertSampleValue: (value) => Number(value / 100)
646
- },
647
- {
648
- dataType: DataGPSAltitude.type,
649
- sampleField: 'GPSAltitude',
650
- convertSampleValue: (value) => Number(value)
651
- },
652
- {
653
- dataType: DataAltitude.type,
654
- sampleField: 'Altitude',
655
- convertSampleValue: (value) => Number(value)
656
- },
657
- {
658
- dataType: DataCadence.type,
659
- sampleField: 'Cadence',
660
- convertSampleValue: (value) => Number(value * 60)
661
- },
662
- {
663
- dataType: DataPower.type,
664
- sampleField: 'Power',
665
- convertSampleValue: (value) => Number(value)
666
- },
667
- {
668
- dataType: DataSpeed.type,
669
- sampleField: 'Speed',
670
- convertSampleValue: (value) => Number(value)
671
- },
672
- {
673
- dataType: DataTemperature.type,
674
- sampleField: 'Temperature',
675
- convertSampleValue: (value) => Number(value - 273.15)
676
- },
677
- {
678
- dataType: DataVerticalSpeed.type,
679
- sampleField: 'VerticalSpeed',
680
- convertSampleValue: (value) => Number(value)
681
- },
682
- {
683
- dataType: DataEHPE.type,
684
- sampleField: 'EHPE',
685
- convertSampleValue: (value) => Number(value)
686
- },
687
- {
688
- dataType: DataEVPE.type,
689
- sampleField: 'EVPE',
690
- convertSampleValue: (value) => Number(value)
691
- },
692
- {
693
- dataType: DataNumberOfSatellites.type,
694
- sampleField: 'NumberOfSatellites',
695
- convertSampleValue: (value) => Number(value)
696
- },
697
- {
698
- dataType: DataSatellite5BestSNR.type,
699
- sampleField: 'Satellite5BestSNR',
700
- convertSampleValue: (value) => Number(value)
701
- },
702
- {
703
- dataType: DataBatteryCharge.type,
704
- sampleField: 'BatteryCharge',
705
- convertSampleValue: (value) => Number(value * 100)
706
- },
707
- {
708
- dataType: DataBatteryCurrent.type,
709
- sampleField: 'BatteryCurrent',
710
- convertSampleValue: (value) => Number(value)
711
- },
712
- {
713
- dataType: DataBatteryVoltage.type,
714
- sampleField: 'BatteryVoltage',
715
- convertSampleValue: (value) => Number(value)
716
- }
717
- ];