@sports-alliance/sports-lib 6.0.4 → 6.1.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 (1270) hide show
  1. package/jest.config.js +1 -1
  2. package/lib/cjs/activities/activity.spec.d.ts +1 -0
  3. package/lib/cjs/activities/activity.spec.js +350 -0
  4. package/lib/cjs/activities/activityt-types.spec.d.ts +1 -0
  5. package/lib/cjs/activities/activityt-types.spec.js +18 -0
  6. package/lib/cjs/creators/creator.spec.d.ts +1 -0
  7. package/lib/cjs/creators/creator.spec.js +27 -0
  8. package/lib/cjs/data/data-store.spec.d.ts +1 -0
  9. package/lib/cjs/data/data-store.spec.js +42 -0
  10. package/lib/cjs/data/data.spec.d.ts +1 -0
  11. package/lib/cjs/data/data.spec.js +27 -0
  12. package/lib/cjs/data/data.store.export.spec.d.ts +1 -0
  13. package/lib/cjs/data/data.store.export.spec.js +87 -0
  14. package/lib/cjs/data/ibi/data.ibi.spec.d.ts +1 -0
  15. package/lib/cjs/data/ibi/data.ibi.spec.js +68 -0
  16. package/lib/cjs/events/adapters/importers/fit/importer.fit.integration.spec.d.ts +1 -0
  17. package/lib/cjs/events/adapters/importers/fit/importer.fit.integration.spec.js +65 -0
  18. package/lib/cjs/events/adapters/importers/fit/importer.fit.js +935 -0
  19. package/lib/cjs/events/adapters/importers/fit/importer.fit.spec.d.ts +1 -0
  20. package/lib/cjs/events/adapters/importers/fit/importer.fit.spec.js +328 -0
  21. package/lib/cjs/events/adapters/importers/gpx/importer.gpx.integration.spec.d.ts +1 -0
  22. package/lib/cjs/events/adapters/importers/gpx/importer.gpx.integration.spec.js +65 -0
  23. package/lib/cjs/events/adapters/importers/gpx/importer.gpx.spec.d.ts +1 -0
  24. package/lib/cjs/events/adapters/importers/gpx/importer.gpx.spec.js +59 -0
  25. package/lib/cjs/events/adapters/importers/suunto/importer.suunto.integration.spec.d.ts +1 -0
  26. package/lib/cjs/events/adapters/importers/suunto/importer.suunto.integration.spec.js +65 -0
  27. package/lib/cjs/events/adapters/importers/tcx/importer.tcx.integration.spec.d.ts +1 -0
  28. package/lib/cjs/events/adapters/importers/tcx/importer.tcx.integration.spec.js +67 -0
  29. package/lib/cjs/events/event.spec.d.ts +1 -0
  30. package/lib/cjs/events/event.spec.js +53 -0
  31. package/lib/cjs/events/utilities/activity.utilities.spec.d.ts +1 -0
  32. package/lib/cjs/events/utilities/activity.utilities.spec.js +227 -0
  33. package/lib/cjs/events/utilities/grade-calculator/grade-calculator.spec.d.ts +1 -0
  34. package/lib/cjs/events/utilities/grade-calculator/grade-calculator.spec.js +95 -0
  35. package/lib/cjs/id/id.class.spec.d.ts +3 -0
  36. package/lib/cjs/id/id.class.spec.js +17 -0
  37. package/lib/cjs/intensity-zones/intensity-zones.spec.d.ts +1 -0
  38. package/lib/cjs/intensity-zones/intensity-zones.spec.js +32 -0
  39. package/lib/cjs/package.json +1 -0
  40. package/lib/cjs/specs/activities-parsing.integration.spec.d.ts +1 -0
  41. package/lib/cjs/specs/activities-parsing.integration.spec.js +1871 -0
  42. package/lib/cjs/specs/fixtures/streams/strava/rides/3171472783.json +52534 -0
  43. package/lib/cjs/specs/fixtures/streams/strava/rides/3171487458.json +78818 -0
  44. package/lib/cjs/specs/fixtures/streams/strava/rides/343080886.json +105090 -0
  45. package/lib/cjs/specs/fixtures/streams/strava/rides/5910143591.json +110711 -0
  46. package/lib/cjs/specs/fixtures/streams/strava/runs/2451375851.json +74846 -0
  47. package/lib/cjs/specs/fixtures/streams/strava/runs/2709634581.json +66817 -0
  48. package/lib/cjs/specs/fixtures/streams/strava/runs/3156040843.json +17594 -0
  49. package/lib/cjs/specs/fixtures/streams/strava/runs/3182900697.json +17322 -0
  50. package/lib/cjs/specs/fixtures/streams/strava/runs/3183465494.json +20463 -0
  51. package/lib/cjs/specs/fixtures/streams/strava/runs/3183490558.json +58202 -0
  52. package/lib/cjs/specs/spec-utils.d.ts +18 -0
  53. package/lib/cjs/specs/spec-utils.js +163 -0
  54. package/lib/cjs/specs/strava-streams-compliance.spec.d.ts +1 -0
  55. package/lib/cjs/specs/strava-streams-compliance.spec.js +976 -0
  56. package/lib/cjs/streams/stream.spec.d.ts +1 -0
  57. package/lib/cjs/streams/stream.spec.js +170 -0
  58. package/lib/esm/activities/activity-parsing-options.d.ts +18 -0
  59. package/lib/esm/activities/activity-parsing-options.js +13 -0
  60. package/lib/esm/activities/activity.d.ts +75 -0
  61. package/lib/esm/activities/activity.interface.d.ts +206 -0
  62. package/lib/esm/activities/activity.interface.js +1 -0
  63. package/lib/esm/activities/activity.js +273 -0
  64. package/lib/esm/activities/activity.json.interface.d.ts +23 -0
  65. package/lib/esm/activities/activity.json.interface.js +1 -0
  66. package/lib/esm/activities/activity.spec.d.ts +1 -0
  67. package/lib/esm/activities/activity.spec.js +348 -0
  68. package/lib/esm/activities/activity.types.d.ts +825 -0
  69. package/lib/esm/activities/activity.types.js +1035 -0
  70. package/lib/esm/activities/activityt-types.spec.d.ts +1 -0
  71. package/lib/esm/activities/activityt-types.spec.js +16 -0
  72. package/lib/esm/activities/devices/device.d.ts +21 -0
  73. package/lib/esm/activities/devices/device.interface.d.ts +18 -0
  74. package/lib/esm/activities/devices/device.interface.js +1 -0
  75. package/lib/esm/activities/devices/device.js +25 -0
  76. package/lib/esm/activities/devices/device.json.interface.d.ts +17 -0
  77. package/lib/esm/activities/devices/device.json.interface.js +1 -0
  78. package/lib/esm/constants/constants.d.ts +8 -0
  79. package/lib/esm/constants/constants.js +8 -0
  80. package/lib/esm/creators/creator.d.ts +15 -0
  81. package/lib/esm/creators/creator.interface.d.ts +14 -0
  82. package/lib/esm/creators/creator.interface.js +1 -0
  83. package/lib/esm/creators/creator.js +37 -0
  84. package/lib/esm/creators/creator.json.interface.d.ts +11 -0
  85. package/lib/esm/creators/creator.json.interface.js +1 -0
  86. package/lib/esm/creators/creator.spec.d.ts +1 -0
  87. package/lib/esm/creators/creator.spec.js +25 -0
  88. package/lib/esm/data/data-active-lap.d.ts +4 -0
  89. package/lib/esm/data/data-active-lap.js +4 -0
  90. package/lib/esm/data/data-active-lengths.d.ts +4 -0
  91. package/lib/esm/data/data-active-lengths.js +4 -0
  92. package/lib/esm/data/data-aerobic-training-effect.d.ts +6 -0
  93. package/lib/esm/data/data-aerobic-training-effect.js +8 -0
  94. package/lib/esm/data/data-anaerobic-training-effect.d.ts +6 -0
  95. package/lib/esm/data/data-anaerobic-training-effect.js +8 -0
  96. package/lib/esm/data/data-stance-time-balance-left.d.ts +4 -0
  97. package/lib/esm/data/data-stance-time-balance-left.js +4 -0
  98. package/lib/esm/data/data-stance-time-balance-right.d.ts +4 -0
  99. package/lib/esm/data/data-stance-time-balance-right.js +4 -0
  100. package/lib/esm/data/data-stance-time-balance.d.ts +3 -0
  101. package/lib/esm/data/data-stance-time-balance.js +3 -0
  102. package/lib/esm/data/data-store.spec.d.ts +1 -0
  103. package/lib/esm/data/data-store.spec.js +40 -0
  104. package/lib/esm/data/data-total-cycles.d.ts +4 -0
  105. package/lib/esm/data/data-total-cycles.js +4 -0
  106. package/lib/esm/data/data.absolute-pressure.d.ts +5 -0
  107. package/lib/esm/data/data.absolute-pressure.js +5 -0
  108. package/lib/esm/data/data.accumulated-power.d.ts +6 -0
  109. package/lib/esm/data/data.accumulated-power.js +8 -0
  110. package/lib/esm/data/data.activity-types.d.ts +5 -0
  111. package/lib/esm/data/data.activity-types.js +7 -0
  112. package/lib/esm/data/data.air-power-avg.d.ts +4 -0
  113. package/lib/esm/data/data.air-power-avg.js +4 -0
  114. package/lib/esm/data/data.air-power-max.d.ts +4 -0
  115. package/lib/esm/data/data.air-power-max.js +4 -0
  116. package/lib/esm/data/data.air-power-min.d.ts +4 -0
  117. package/lib/esm/data/data.air-power-min.js +4 -0
  118. package/lib/esm/data/data.air-power.d.ts +6 -0
  119. package/lib/esm/data/data.air-power.js +8 -0
  120. package/lib/esm/data/data.alti-baro-profile.d.ts +4 -0
  121. package/lib/esm/data/data.alti-baro-profile.js +4 -0
  122. package/lib/esm/data/data.altitude-avg.d.ts +4 -0
  123. package/lib/esm/data/data.altitude-avg.js +4 -0
  124. package/lib/esm/data/data.altitude-gps.d.ts +5 -0
  125. package/lib/esm/data/data.altitude-gps.js +5 -0
  126. package/lib/esm/data/data.altitude-max.d.ts +4 -0
  127. package/lib/esm/data/data.altitude-max.js +4 -0
  128. package/lib/esm/data/data.altitude-min.d.ts +4 -0
  129. package/lib/esm/data/data.altitude-min.js +4 -0
  130. package/lib/esm/data/data.altitude-smooth.d.ts +4 -0
  131. package/lib/esm/data/data.altitude-smooth.js +4 -0
  132. package/lib/esm/data/data.altitude.d.ts +6 -0
  133. package/lib/esm/data/data.altitude.js +8 -0
  134. package/lib/esm/data/data.array.d.ts +7 -0
  135. package/lib/esm/data/data.array.js +13 -0
  136. package/lib/esm/data/data.ascent-time.d.ts +4 -0
  137. package/lib/esm/data/data.ascent-time.js +4 -0
  138. package/lib/esm/data/data.ascent.d.ts +4 -0
  139. package/lib/esm/data/data.ascent.js +4 -0
  140. package/lib/esm/data/data.auto-lap-distance.d.ts +5 -0
  141. package/lib/esm/data/data.auto-lap-distance.js +5 -0
  142. package/lib/esm/data/data.auto-lap-duration.d.ts +4 -0
  143. package/lib/esm/data/data.auto-lap-duration.js +4 -0
  144. package/lib/esm/data/data.auto-lap-used.d.ts +5 -0
  145. package/lib/esm/data/data.auto-lap-used.js +7 -0
  146. package/lib/esm/data/data.auto-pause-used.d.ts +5 -0
  147. package/lib/esm/data/data.auto-pause-used.js +7 -0
  148. package/lib/esm/data/data.avg-stride-length.d.ts +4 -0
  149. package/lib/esm/data/data.avg-stride-length.js +4 -0
  150. package/lib/esm/data/data.balance.d.ts +4 -0
  151. package/lib/esm/data/data.balance.js +6 -0
  152. package/lib/esm/data/data.bare.d.ts +4 -0
  153. package/lib/esm/data/data.bare.js +4 -0
  154. package/lib/esm/data/data.battery-charge.d.ts +6 -0
  155. package/lib/esm/data/data.battery-charge.js +8 -0
  156. package/lib/esm/data/data.battery-consumption.d.ts +6 -0
  157. package/lib/esm/data/data.battery-consumption.js +8 -0
  158. package/lib/esm/data/data.battery-current.d.ts +6 -0
  159. package/lib/esm/data/data.battery-current.js +8 -0
  160. package/lib/esm/data/data.battery-life-estimation.d.ts +4 -0
  161. package/lib/esm/data/data.battery-life-estimation.js +4 -0
  162. package/lib/esm/data/data.battery-voltage.d.ts +6 -0
  163. package/lib/esm/data/data.battery-voltage.js +8 -0
  164. package/lib/esm/data/data.bike-pod-used.d.ts +5 -0
  165. package/lib/esm/data/data.bike-pod-used.js +7 -0
  166. package/lib/esm/data/data.boolean.d.ts +5 -0
  167. package/lib/esm/data/data.boolean.js +9 -0
  168. package/lib/esm/data/data.cadence-avg.d.ts +4 -0
  169. package/lib/esm/data/data.cadence-avg.js +4 -0
  170. package/lib/esm/data/data.cadence-max.d.ts +4 -0
  171. package/lib/esm/data/data.cadence-max.js +4 -0
  172. package/lib/esm/data/data.cadence-min.d.ts +4 -0
  173. package/lib/esm/data/data.cadence-min.js +4 -0
  174. package/lib/esm/data/data.cadence.d.ts +6 -0
  175. package/lib/esm/data/data.cadence.js +8 -0
  176. package/lib/esm/data/data.cycling-dynamics.d.ts +3 -0
  177. package/lib/esm/data/data.cycling-dynamics.js +3 -0
  178. package/lib/esm/data/data.cycling-position.d.ts +12 -0
  179. package/lib/esm/data/data.cycling-position.js +37 -0
  180. package/lib/esm/data/data.cycling-seated-time.d.ts +5 -0
  181. package/lib/esm/data/data.cycling-seated-time.js +5 -0
  182. package/lib/esm/data/data.cycling-standing-time.d.ts +5 -0
  183. package/lib/esm/data/data.cycling-standing-time.js +5 -0
  184. package/lib/esm/data/data.d.ts +21 -0
  185. package/lib/esm/data/data.descent-time.d.ts +4 -0
  186. package/lib/esm/data/data.descent-time.js +4 -0
  187. package/lib/esm/data/data.descent.d.ts +4 -0
  188. package/lib/esm/data/data.descent.js +4 -0
  189. package/lib/esm/data/data.description.d.ts +4 -0
  190. package/lib/esm/data/data.description.js +4 -0
  191. package/lib/esm/data/data.device-location.d.ts +4 -0
  192. package/lib/esm/data/data.device-location.js +4 -0
  193. package/lib/esm/data/data.device-names.d.ts +5 -0
  194. package/lib/esm/data/data.device-names.js +7 -0
  195. package/lib/esm/data/data.distance.d.ts +11 -0
  196. package/lib/esm/data/data.distance.js +15 -0
  197. package/lib/esm/data/data.duration.d.ts +14 -0
  198. package/lib/esm/data/data.duration.js +56 -0
  199. package/lib/esm/data/data.ehpe.d.ts +5 -0
  200. package/lib/esm/data/data.ehpe.js +5 -0
  201. package/lib/esm/data/data.enabled-navigation-systems.d.ts +4 -0
  202. package/lib/esm/data/data.enabled-navigation-systems.js +4 -0
  203. package/lib/esm/data/data.end-altitude.d.ts +4 -0
  204. package/lib/esm/data/data.end-altitude.js +4 -0
  205. package/lib/esm/data/data.end-position.d.ts +4 -0
  206. package/lib/esm/data/data.end-position.js +4 -0
  207. package/lib/esm/data/data.energy.d.ts +6 -0
  208. package/lib/esm/data/data.energy.js +8 -0
  209. package/lib/esm/data/data.epoc.d.ts +5 -0
  210. package/lib/esm/data/data.epoc.js +5 -0
  211. package/lib/esm/data/data.event.d.ts +3 -0
  212. package/lib/esm/data/data.event.js +3 -0
  213. package/lib/esm/data/data.evpe.d.ts +4 -0
  214. package/lib/esm/data/data.evpe.js +4 -0
  215. package/lib/esm/data/data.feeling.d.ts +12 -0
  216. package/lib/esm/data/data.feeling.js +15 -0
  217. package/lib/esm/data/data.foot-pod-used.d.ts +5 -0
  218. package/lib/esm/data/data.foot-pod-used.js +7 -0
  219. package/lib/esm/data/data.form-power.d.ts +4 -0
  220. package/lib/esm/data/data.form-power.js +4 -0
  221. package/lib/esm/data/data.fused-altitude.d.ts +5 -0
  222. package/lib/esm/data/data.fused-altitude.js +7 -0
  223. package/lib/esm/data/data.fused-location.d.ts +5 -0
  224. package/lib/esm/data/data.fused-location.js +7 -0
  225. package/lib/esm/data/data.gnss-distance.d.ts +4 -0
  226. package/lib/esm/data/data.gnss-distance.js +4 -0
  227. package/lib/esm/data/data.grade-adjusted-pace-avg.d.ts +10 -0
  228. package/lib/esm/data/data.grade-adjusted-pace-avg.js +15 -0
  229. package/lib/esm/data/data.grade-adjusted-pace-max.d.ts +10 -0
  230. package/lib/esm/data/data.grade-adjusted-pace-max.js +15 -0
  231. package/lib/esm/data/data.grade-adjusted-pace-min.d.ts +10 -0
  232. package/lib/esm/data/data.grade-adjusted-pace-min.js +15 -0
  233. package/lib/esm/data/data.grade-adjusted-pace.d.ts +12 -0
  234. package/lib/esm/data/data.grade-adjusted-pace.js +25 -0
  235. package/lib/esm/data/data.grade-adjusted-speed-avg.d.ts +34 -0
  236. package/lib/esm/data/data.grade-adjusted-speed-avg.js +46 -0
  237. package/lib/esm/data/data.grade-adjusted-speed-max.d.ts +34 -0
  238. package/lib/esm/data/data.grade-adjusted-speed-max.js +46 -0
  239. package/lib/esm/data/data.grade-adjusted-speed-min.d.ts +34 -0
  240. package/lib/esm/data/data.grade-adjusted-speed-min.js +46 -0
  241. package/lib/esm/data/data.grade-adjusted-speed.d.ts +41 -0
  242. package/lib/esm/data/data.grade-adjusted-speed.js +78 -0
  243. package/lib/esm/data/data.grade-smooth.d.ts +5 -0
  244. package/lib/esm/data/data.grade-smooth.js +7 -0
  245. package/lib/esm/data/data.grade.d.ts +5 -0
  246. package/lib/esm/data/data.grade.js +7 -0
  247. package/lib/esm/data/data.ground-time.d.ts +6 -0
  248. package/lib/esm/data/data.ground-time.js +8 -0
  249. package/lib/esm/data/data.heart-rate-avg.d.ts +4 -0
  250. package/lib/esm/data/data.heart-rate-avg.js +4 -0
  251. package/lib/esm/data/data.heart-rate-max.d.ts +4 -0
  252. package/lib/esm/data/data.heart-rate-max.js +4 -0
  253. package/lib/esm/data/data.heart-rate-min.d.ts +4 -0
  254. package/lib/esm/data/data.heart-rate-min.js +4 -0
  255. package/lib/esm/data/data.heart-rate-used.d.ts +5 -0
  256. package/lib/esm/data/data.heart-rate-used.js +7 -0
  257. package/lib/esm/data/data.heart-rate-zone-five-duration.d.ts +4 -0
  258. package/lib/esm/data/data.heart-rate-zone-five-duration.js +4 -0
  259. package/lib/esm/data/data.heart-rate-zone-four-duration.d.ts +4 -0
  260. package/lib/esm/data/data.heart-rate-zone-four-duration.js +4 -0
  261. package/lib/esm/data/data.heart-rate-zone-one-duration.d.ts +4 -0
  262. package/lib/esm/data/data.heart-rate-zone-one-duration.js +4 -0
  263. package/lib/esm/data/data.heart-rate-zone-three-duration.d.ts +4 -0
  264. package/lib/esm/data/data.heart-rate-zone-three-duration.js +4 -0
  265. package/lib/esm/data/data.heart-rate-zone-two-duration.d.ts +4 -0
  266. package/lib/esm/data/data.heart-rate-zone-two-duration.js +4 -0
  267. package/lib/esm/data/data.heart-rate.d.ts +6 -0
  268. package/lib/esm/data/data.heart-rate.js +8 -0
  269. package/lib/esm/data/data.ibi.d.ts +6 -0
  270. package/lib/esm/data/data.ibi.js +8 -0
  271. package/lib/esm/data/data.interface.d.ts +19 -0
  272. package/lib/esm/data/data.interface.js +5 -0
  273. package/lib/esm/data/data.js +62 -0
  274. package/lib/esm/data/data.json.interface.d.ts +4 -0
  275. package/lib/esm/data/data.json.interface.js +1 -0
  276. package/lib/esm/data/data.latitude-degrees.d.ts +5 -0
  277. package/lib/esm/data/data.latitude-degrees.js +5 -0
  278. package/lib/esm/data/data.left-balance.d.ts +4 -0
  279. package/lib/esm/data/data.left-balance.js +4 -0
  280. package/lib/esm/data/data.leg-stiffness.d.ts +11 -0
  281. package/lib/esm/data/data.leg-stiffness.js +16 -0
  282. package/lib/esm/data/data.longitude-degrees.d.ts +5 -0
  283. package/lib/esm/data/data.longitude-degrees.js +5 -0
  284. package/lib/esm/data/data.moving-time.d.ts +4 -0
  285. package/lib/esm/data/data.moving-time.js +4 -0
  286. package/lib/esm/data/data.number-of-satellites.d.ts +5 -0
  287. package/lib/esm/data/data.number-of-satellites.js +7 -0
  288. package/lib/esm/data/data.number-of.samples.d.ts +4 -0
  289. package/lib/esm/data/data.number-of.samples.js +4 -0
  290. package/lib/esm/data/data.number.d.ts +7 -0
  291. package/lib/esm/data/data.number.js +13 -0
  292. package/lib/esm/data/data.pace-avg.d.ts +8 -0
  293. package/lib/esm/data/data.pace-avg.js +8 -0
  294. package/lib/esm/data/data.pace-max.d.ts +8 -0
  295. package/lib/esm/data/data.pace-max.js +8 -0
  296. package/lib/esm/data/data.pace-min.d.ts +8 -0
  297. package/lib/esm/data/data.pace-min.js +8 -0
  298. package/lib/esm/data/data.pace.d.ts +14 -0
  299. package/lib/esm/data/data.pace.js +46 -0
  300. package/lib/esm/data/data.pause.d.ts +4 -0
  301. package/lib/esm/data/data.pause.js +4 -0
  302. package/lib/esm/data/data.peak-epoc.d.ts +5 -0
  303. package/lib/esm/data/data.peak-epoc.js +7 -0
  304. package/lib/esm/data/data.peak-training-effect.d.ts +4 -0
  305. package/lib/esm/data/data.peak-training-effect.js +4 -0
  306. package/lib/esm/data/data.percent.d.ts +4 -0
  307. package/lib/esm/data/data.percent.js +4 -0
  308. package/lib/esm/data/data.pool-length.d.ts +5 -0
  309. package/lib/esm/data/data.pool-length.js +5 -0
  310. package/lib/esm/data/data.position.d.ts +10 -0
  311. package/lib/esm/data/data.position.interface.d.ts +4 -0
  312. package/lib/esm/data/data.position.interface.js +1 -0
  313. package/lib/esm/data/data.position.js +18 -0
  314. package/lib/esm/data/data.power-avg.d.ts +4 -0
  315. package/lib/esm/data/data.power-avg.js +4 -0
  316. package/lib/esm/data/data.power-down.d.ts +4 -0
  317. package/lib/esm/data/data.power-down.js +4 -0
  318. package/lib/esm/data/data.power-intensity-factor.d.ts +5 -0
  319. package/lib/esm/data/data.power-intensity-factor.js +5 -0
  320. package/lib/esm/data/data.power-left.d.ts +4 -0
  321. package/lib/esm/data/data.power-left.js +4 -0
  322. package/lib/esm/data/data.power-max.d.ts +4 -0
  323. package/lib/esm/data/data.power-max.js +4 -0
  324. package/lib/esm/data/data.power-min.d.ts +4 -0
  325. package/lib/esm/data/data.power-min.js +4 -0
  326. package/lib/esm/data/data.power-normalized.d.ts +4 -0
  327. package/lib/esm/data/data.power-normalized.js +4 -0
  328. package/lib/esm/data/data.power-pedal-smoothness-left.d.ts +4 -0
  329. package/lib/esm/data/data.power-pedal-smoothness-left.js +4 -0
  330. package/lib/esm/data/data.power-pedal-smoothness-right.d.ts +4 -0
  331. package/lib/esm/data/data.power-pedal-smoothness-right.js +4 -0
  332. package/lib/esm/data/data.power-pod-used.d.ts +5 -0
  333. package/lib/esm/data/data.power-pod-used.js +7 -0
  334. package/lib/esm/data/data.power-right.d.ts +4 -0
  335. package/lib/esm/data/data.power-right.js +4 -0
  336. package/lib/esm/data/data.power-torque-effectiveness-left.d.ts +4 -0
  337. package/lib/esm/data/data.power-torque-effectiveness-left.js +4 -0
  338. package/lib/esm/data/data.power-torque-effectiveness-right.d.ts +4 -0
  339. package/lib/esm/data/data.power-torque-effectiveness-right.js +4 -0
  340. package/lib/esm/data/data.power-training-stress-score.d.ts +5 -0
  341. package/lib/esm/data/data.power-training-stress-score.js +5 -0
  342. package/lib/esm/data/data.power-up.d.ts +4 -0
  343. package/lib/esm/data/data.power-up.js +4 -0
  344. package/lib/esm/data/data.power-work.d.ts +5 -0
  345. package/lib/esm/data/data.power-work.js +5 -0
  346. package/lib/esm/data/data.power-zone-five-duration.d.ts +4 -0
  347. package/lib/esm/data/data.power-zone-five-duration.js +4 -0
  348. package/lib/esm/data/data.power-zone-four-duration.d.ts +4 -0
  349. package/lib/esm/data/data.power-zone-four-duration.js +4 -0
  350. package/lib/esm/data/data.power-zone-one-duration.d.ts +4 -0
  351. package/lib/esm/data/data.power-zone-one-duration.js +4 -0
  352. package/lib/esm/data/data.power-zone-three-duration.d.ts +4 -0
  353. package/lib/esm/data/data.power-zone-three-duration.js +4 -0
  354. package/lib/esm/data/data.power-zone-two-duration.d.ts +4 -0
  355. package/lib/esm/data/data.power-zone-two-duration.js +4 -0
  356. package/lib/esm/data/data.power.d.ts +6 -0
  357. package/lib/esm/data/data.power.js +8 -0
  358. package/lib/esm/data/data.recovery-time.d.ts +5 -0
  359. package/lib/esm/data/data.recovery-time.js +7 -0
  360. package/lib/esm/data/data.rider-position-change-event.d.ts +7 -0
  361. package/lib/esm/data/data.rider-position-change-event.js +8 -0
  362. package/lib/esm/data/data.right-balance.d.ts +4 -0
  363. package/lib/esm/data/data.right-balance.js +4 -0
  364. package/lib/esm/data/data.rpe.d.ts +18 -0
  365. package/lib/esm/data/data.rpe.js +23 -0
  366. package/lib/esm/data/data.satellite-5-best-snr.d.ts +4 -0
  367. package/lib/esm/data/data.satellite-5-best-snr.js +4 -0
  368. package/lib/esm/data/data.sea-level-pressure.d.ts +5 -0
  369. package/lib/esm/data/data.sea-level-pressure.js +5 -0
  370. package/lib/esm/data/data.spec.d.ts +1 -0
  371. package/lib/esm/data/data.spec.js +25 -0
  372. package/lib/esm/data/data.speed-avg.d.ts +34 -0
  373. package/lib/esm/data/data.speed-avg.js +46 -0
  374. package/lib/esm/data/data.speed-max.d.ts +34 -0
  375. package/lib/esm/data/data.speed-max.js +46 -0
  376. package/lib/esm/data/data.speed-min.d.ts +34 -0
  377. package/lib/esm/data/data.speed-min.js +46 -0
  378. package/lib/esm/data/data.speed-zone-five-duration.d.ts +4 -0
  379. package/lib/esm/data/data.speed-zone-five-duration.js +4 -0
  380. package/lib/esm/data/data.speed-zone-four-duration.d.ts +4 -0
  381. package/lib/esm/data/data.speed-zone-four-duration.js +4 -0
  382. package/lib/esm/data/data.speed-zone-one-duration.d.ts +4 -0
  383. package/lib/esm/data/data.speed-zone-one-duration.js +4 -0
  384. package/lib/esm/data/data.speed-zone-three-duration.d.ts +4 -0
  385. package/lib/esm/data/data.speed-zone-three-duration.js +4 -0
  386. package/lib/esm/data/data.speed-zone-two-duration.d.ts +4 -0
  387. package/lib/esm/data/data.speed-zone-two-duration.js +4 -0
  388. package/lib/esm/data/data.speed.d.ts +43 -0
  389. package/lib/esm/data/data.speed.js +88 -0
  390. package/lib/esm/data/data.sport-profile-name.d.ts +4 -0
  391. package/lib/esm/data/data.sport-profile-name.js +4 -0
  392. package/lib/esm/data/data.stance-time.d.ts +5 -0
  393. package/lib/esm/data/data.stance-time.js +5 -0
  394. package/lib/esm/data/data.start-altitude.d.ts +4 -0
  395. package/lib/esm/data/data.start-altitude.js +4 -0
  396. package/lib/esm/data/data.start-event.d.ts +4 -0
  397. package/lib/esm/data/data.start-event.js +4 -0
  398. package/lib/esm/data/data.start-position.d.ts +4 -0
  399. package/lib/esm/data/data.start-position.js +4 -0
  400. package/lib/esm/data/data.step-length.d.ts +4 -0
  401. package/lib/esm/data/data.step-length.js +4 -0
  402. package/lib/esm/data/data.steps-old.d.ts +4 -0
  403. package/lib/esm/data/data.steps-old.js +4 -0
  404. package/lib/esm/data/data.steps.d.ts +4 -0
  405. package/lib/esm/data/data.steps.js +4 -0
  406. package/lib/esm/data/data.stop-all-event.d.ts +4 -0
  407. package/lib/esm/data/data.stop-all-event.js +4 -0
  408. package/lib/esm/data/data.stop-event.d.ts +4 -0
  409. package/lib/esm/data/data.stop-event.js +4 -0
  410. package/lib/esm/data/data.store.d.ts +69 -0
  411. package/lib/esm/data/data.store.export.spec.d.ts +1 -0
  412. package/lib/esm/data/data.store.export.spec.js +66 -0
  413. package/lib/esm/data/data.store.js +1209 -0
  414. package/lib/esm/data/data.string.d.ts +7 -0
  415. package/lib/esm/data/data.string.js +13 -0
  416. package/lib/esm/data/data.stryd-altitude.d.ts +4 -0
  417. package/lib/esm/data/data.stryd-altitude.js +4 -0
  418. package/lib/esm/data/data.stryd-distance.d.ts +4 -0
  419. package/lib/esm/data/data.stryd-distance.js +4 -0
  420. package/lib/esm/data/data.stryd-speed.d.ts +4 -0
  421. package/lib/esm/data/data.stryd-speed.js +4 -0
  422. package/lib/esm/data/data.swim-pace-avg.d.ts +8 -0
  423. package/lib/esm/data/data.swim-pace-avg.js +8 -0
  424. package/lib/esm/data/data.swim-pace-max.d.ts +8 -0
  425. package/lib/esm/data/data.swim-pace-max.js +8 -0
  426. package/lib/esm/data/data.swim-pace-min.d.ts +8 -0
  427. package/lib/esm/data/data.swim-pace-min.js +8 -0
  428. package/lib/esm/data/data.swim-pace.d.ts +11 -0
  429. package/lib/esm/data/data.swim-pace.js +19 -0
  430. package/lib/esm/data/data.swolf-25m.d.ts +4 -0
  431. package/lib/esm/data/data.swolf-25m.js +4 -0
  432. package/lib/esm/data/data.swolf-50m.d.ts +4 -0
  433. package/lib/esm/data/data.swolf-50m.js +4 -0
  434. package/lib/esm/data/data.target-distance.d.ts +4 -0
  435. package/lib/esm/data/data.target-distance.js +4 -0
  436. package/lib/esm/data/data.target-heart-rate-zone.d.ts +4 -0
  437. package/lib/esm/data/data.target-heart-rate-zone.js +4 -0
  438. package/lib/esm/data/data.target-power-zone.d.ts +4 -0
  439. package/lib/esm/data/data.target-power-zone.js +4 -0
  440. package/lib/esm/data/data.target-speed-zone.d.ts +4 -0
  441. package/lib/esm/data/data.target-speed-zone.js +4 -0
  442. package/lib/esm/data/data.target-time.d.ts +4 -0
  443. package/lib/esm/data/data.target-time.js +4 -0
  444. package/lib/esm/data/data.temperature-avg.d.ts +4 -0
  445. package/lib/esm/data/data.temperature-avg.js +4 -0
  446. package/lib/esm/data/data.temperature-max.d.ts +4 -0
  447. package/lib/esm/data/data.temperature-max.js +4 -0
  448. package/lib/esm/data/data.temperature-min.d.ts +4 -0
  449. package/lib/esm/data/data.temperature-min.js +4 -0
  450. package/lib/esm/data/data.temperature.d.ts +6 -0
  451. package/lib/esm/data/data.temperature.js +8 -0
  452. package/lib/esm/data/data.time.d.ts +4 -0
  453. package/lib/esm/data/data.time.js +6 -0
  454. package/lib/esm/data/data.timer-time.d.ts +4 -0
  455. package/lib/esm/data/data.timer-time.js +4 -0
  456. package/lib/esm/data/data.vertical-oscillation.d.ts +5 -0
  457. package/lib/esm/data/data.vertical-oscillation.js +5 -0
  458. package/lib/esm/data/data.vertical-ratio.d.ts +5 -0
  459. package/lib/esm/data/data.vertical-ratio.js +5 -0
  460. package/lib/esm/data/data.vertical-speed-avg.d.ts +39 -0
  461. package/lib/esm/data/data.vertical-speed-avg.js +53 -0
  462. package/lib/esm/data/data.vertical-speed-max.d.ts +39 -0
  463. package/lib/esm/data/data.vertical-speed-max.js +53 -0
  464. package/lib/esm/data/data.vertical-speed-min.d.ts +39 -0
  465. package/lib/esm/data/data.vertical-speed-min.js +53 -0
  466. package/lib/esm/data/data.vertical-speed.d.ts +55 -0
  467. package/lib/esm/data/data.vertical-speed.js +103 -0
  468. package/lib/esm/data/data.vo2-max.d.ts +5 -0
  469. package/lib/esm/data/data.vo2-max.js +7 -0
  470. package/lib/esm/data/ibi/data.ibi.d.ts +56 -0
  471. package/lib/esm/data/ibi/data.ibi.filters.d.ts +26 -0
  472. package/lib/esm/data/ibi/data.ibi.filters.js +52 -0
  473. package/lib/esm/data/ibi/data.ibi.js +98 -0
  474. package/lib/esm/data/ibi/data.ibi.spec.d.ts +1 -0
  475. package/lib/esm/data/ibi/data.ibi.spec.js +66 -0
  476. package/lib/esm/duration/duration.class.abstract.d.ts +19 -0
  477. package/lib/esm/duration/duration.class.abstract.js +36 -0
  478. package/lib/esm/duration/duration.class.interface.d.ts +31 -0
  479. package/lib/esm/duration/duration.class.interface.js +1 -0
  480. package/lib/esm/errors/duration-exceeded-event-lib.error.d.ts +6 -0
  481. package/lib/esm/errors/duration-exceeded-event-lib.error.js +9 -0
  482. package/lib/esm/errors/empty-event-sports-libs.error.d.ts +6 -0
  483. package/lib/esm/errors/empty-event-sports-libs.error.js +9 -0
  484. package/lib/esm/errors/event-lib.error.d.ts +6 -0
  485. package/lib/esm/errors/event-lib.error.js +8 -0
  486. package/lib/esm/errors/lib.error.d.ts +4 -0
  487. package/lib/esm/errors/lib.error.js +6 -0
  488. package/lib/esm/errors/parsing-event-lib.error.d.ts +6 -0
  489. package/lib/esm/errors/parsing-event-lib.error.js +9 -0
  490. package/lib/esm/events/adapters/exporters/exporter.gpx.d.ts +7 -0
  491. package/lib/esm/events/adapters/exporters/exporter.gpx.js +75 -0
  492. package/lib/esm/events/adapters/exporters/exporter.interface.d.ts +6 -0
  493. package/lib/esm/events/adapters/exporters/exporter.interface.js +1 -0
  494. package/lib/esm/events/adapters/exporters/exporter.json.d.ts +11 -0
  495. package/lib/esm/events/adapters/exporters/exporter.json.js +20 -0
  496. package/lib/esm/events/adapters/file-type.enum.d.ts +6 -0
  497. package/lib/esm/events/adapters/file-type.enum.js +7 -0
  498. package/lib/esm/events/adapters/importers/fit/importer.fit.ant-plus.device.names.d.ts +3 -0
  499. package/lib/esm/events/adapters/importers/fit/importer.fit.ant-plus.device.names.js +25 -0
  500. package/lib/esm/events/adapters/importers/fit/importer.fit.coros.device.names.d.ts +3 -0
  501. package/lib/esm/events/adapters/importers/fit/importer.fit.coros.device.names.js +4 -0
  502. package/lib/esm/events/adapters/importers/fit/importer.fit.d.ts +36 -0
  503. package/lib/esm/events/adapters/importers/fit/importer.fit.development.device.names.d.ts +3 -0
  504. package/lib/esm/events/adapters/importers/fit/importer.fit.development.device.names.js +4 -0
  505. package/lib/esm/events/adapters/importers/fit/importer.fit.garmin.device.names.d.ts +3 -0
  506. package/lib/esm/events/adapters/importers/fit/importer.fit.garmin.device.names.js +403 -0
  507. package/lib/esm/events/adapters/importers/fit/importer.fit.hammerhead.device.names.d.ts +3 -0
  508. package/lib/esm/events/adapters/importers/fit/importer.fit.hammerhead.device.names.js +4 -0
  509. package/lib/esm/events/adapters/importers/fit/importer.fit.integration.spec.d.ts +1 -0
  510. package/lib/esm/events/adapters/importers/fit/importer.fit.integration.spec.js +44 -0
  511. package/lib/esm/events/adapters/importers/fit/importer.fit.js +928 -0
  512. package/lib/esm/events/adapters/importers/fit/importer.fit.lezyne.device.names.d.ts +3 -0
  513. package/lib/esm/events/adapters/importers/fit/importer.fit.lezyne.device.names.js +3 -0
  514. package/lib/esm/events/adapters/importers/fit/importer.fit.magellan.device.names.d.ts +3 -0
  515. package/lib/esm/events/adapters/importers/fit/importer.fit.magellan.device.names.js +5 -0
  516. package/lib/esm/events/adapters/importers/fit/importer.fit.mapper.d.ts +5 -0
  517. package/lib/esm/events/adapters/importers/fit/importer.fit.mapper.js +219 -0
  518. package/lib/esm/events/adapters/importers/fit/importer.fit.saris.device.names.d.ts +3 -0
  519. package/lib/esm/events/adapters/importers/fit/importer.fit.saris.device.names.js +3 -0
  520. package/lib/esm/events/adapters/importers/fit/importer.fit.spec.d.ts +1 -0
  521. package/lib/esm/events/adapters/importers/fit/importer.fit.spec.js +326 -0
  522. package/lib/esm/events/adapters/importers/fit/importer.fit.srm.device.names.d.ts +3 -0
  523. package/lib/esm/events/adapters/importers/fit/importer.fit.srm.device.names.js +7 -0
  524. package/lib/esm/events/adapters/importers/fit/importer.fit.suunto.device.names.d.ts +3 -0
  525. package/lib/esm/events/adapters/importers/fit/importer.fit.suunto.device.names.js +15 -0
  526. package/lib/esm/events/adapters/importers/fit/importer.fit.wahoo.device.names.d.ts +3 -0
  527. package/lib/esm/events/adapters/importers/fit/importer.fit.wahoo.device.names.js +6 -0
  528. package/lib/esm/events/adapters/importers/gpx/gx-parser.d.ts +4 -0
  529. package/lib/esm/events/adapters/importers/gpx/gx-parser.js +36 -0
  530. package/lib/esm/events/adapters/importers/gpx/importer.gpx.d.ts +5 -0
  531. package/lib/esm/events/adapters/importers/gpx/importer.gpx.integration.spec.d.ts +1 -0
  532. package/lib/esm/events/adapters/importers/gpx/importer.gpx.integration.spec.js +44 -0
  533. package/lib/esm/events/adapters/importers/gpx/importer.gpx.js +102 -0
  534. package/lib/esm/events/adapters/importers/gpx/importer.gpx.mapper.d.ts +5 -0
  535. package/lib/esm/events/adapters/importers/gpx/importer.gpx.mapper.js +142 -0
  536. package/lib/esm/events/adapters/importers/gpx/importer.gpx.spec.d.ts +1 -0
  537. package/lib/esm/events/adapters/importers/gpx/importer.gpx.spec.js +54 -0
  538. package/lib/esm/events/adapters/importers/json/importer.json.d.ts +26 -0
  539. package/lib/esm/events/adapters/importers/json/importer.json.js +157 -0
  540. package/lib/esm/events/adapters/importers/sample-info.interface.d.ts +3 -0
  541. package/lib/esm/events/adapters/importers/sample-info.interface.js +1 -0
  542. package/lib/esm/events/adapters/importers/suunto/importer.suunto.activity.ids.d.ts +84 -0
  543. package/lib/esm/events/adapters/importers/suunto/importer.suunto.activity.ids.js +85 -0
  544. package/lib/esm/events/adapters/importers/suunto/importer.suunto.device.names.d.ts +3 -0
  545. package/lib/esm/events/adapters/importers/suunto/importer.suunto.device.names.js +25 -0
  546. package/lib/esm/events/adapters/importers/suunto/importer.suunto.integration.spec.d.ts +1 -0
  547. package/lib/esm/events/adapters/importers/suunto/importer.suunto.integration.spec.js +44 -0
  548. package/lib/esm/events/adapters/importers/suunto/importer.suunto.json.d.ts +25 -0
  549. package/lib/esm/events/adapters/importers/suunto/importer.suunto.json.js +717 -0
  550. package/lib/esm/events/adapters/importers/suunto/importer.suunto.sml.d.ts +6 -0
  551. package/lib/esm/events/adapters/importers/suunto/importer.suunto.sml.js +124 -0
  552. package/lib/esm/events/adapters/importers/tcx/importer.tcx.d.ts +20 -0
  553. package/lib/esm/events/adapters/importers/tcx/importer.tcx.integration.spec.d.ts +1 -0
  554. package/lib/esm/events/adapters/importers/tcx/importer.tcx.integration.spec.js +46 -0
  555. package/lib/esm/events/adapters/importers/tcx/importer.tcx.js +442 -0
  556. package/lib/esm/events/adapters/importers/tcx/importer.tcx.mapper.d.ts +5 -0
  557. package/lib/esm/events/adapters/importers/tcx/importer.tcx.mapper.js +91 -0
  558. package/lib/esm/events/adapters/importers/tcx/utils.tcx.d.ts +5 -0
  559. package/lib/esm/events/adapters/importers/tcx/utils.tcx.js +33 -0
  560. package/lib/esm/events/event.d.ts +29 -0
  561. package/lib/esm/events/event.interface.d.ts +26 -0
  562. package/lib/esm/events/event.interface.js +1 -0
  563. package/lib/esm/events/event.js +123 -0
  564. package/lib/esm/events/event.json.interface.d.ts +16 -0
  565. package/lib/esm/events/event.json.interface.js +1 -0
  566. package/lib/esm/events/event.spec.d.ts +1 -0
  567. package/lib/esm/events/event.spec.js +51 -0
  568. package/lib/esm/events/utilities/activity.utilities.d.ts +140 -0
  569. package/lib/esm/events/utilities/activity.utilities.js +1814 -0
  570. package/lib/esm/events/utilities/activity.utilities.spec.d.ts +1 -0
  571. package/lib/esm/events/utilities/activity.utilities.spec.js +225 -0
  572. package/lib/esm/events/utilities/event.utilities.d.ts +6 -0
  573. package/lib/esm/events/utilities/event.utilities.js +57 -0
  574. package/lib/esm/events/utilities/grade-calculator/grade-calculator.d.ts +36 -0
  575. package/lib/esm/events/utilities/grade-calculator/grade-calculator.js +121 -0
  576. package/lib/esm/events/utilities/grade-calculator/grade-calculator.spec.d.ts +1 -0
  577. package/lib/esm/events/utilities/grade-calculator/grade-calculator.spec.js +93 -0
  578. package/lib/esm/events/utilities/grade-calculator/low-pass-filter.d.ts +38 -0
  579. package/lib/esm/events/utilities/grade-calculator/low-pass-filter.js +86 -0
  580. package/lib/esm/events/utilities/helpers.d.ts +45 -0
  581. package/lib/esm/events/utilities/helpers.js +162 -0
  582. package/lib/esm/geodesy/adapters/adapter.interface.d.ts +4 -0
  583. package/lib/esm/geodesy/adapters/adapter.interface.js +1 -0
  584. package/lib/esm/geodesy/adapters/geolib.adapter.d.ts +7 -0
  585. package/lib/esm/geodesy/adapters/geolib.adapter.js +28 -0
  586. package/lib/esm/id/id.abstract.class.d.ts +6 -0
  587. package/lib/esm/id/id.abstract.class.js +9 -0
  588. package/lib/esm/id/id.class.interface.d.ts +4 -0
  589. package/lib/esm/id/id.class.interface.js +1 -0
  590. package/lib/esm/id/id.class.spec.d.ts +3 -0
  591. package/lib/esm/id/id.class.spec.js +13 -0
  592. package/lib/esm/index.d.ts +35 -0
  593. package/lib/esm/index.js +47 -0
  594. package/lib/esm/intensity-zones/intensity-zones.d.ts +16 -0
  595. package/lib/esm/intensity-zones/intensity-zones.interface.d.ts +15 -0
  596. package/lib/esm/intensity-zones/intensity-zones.interface.js +1 -0
  597. package/lib/esm/intensity-zones/intensity-zones.js +29 -0
  598. package/lib/esm/intensity-zones/intensity-zones.json.interface.d.ts +12 -0
  599. package/lib/esm/intensity-zones/intensity-zones.json.interface.js +1 -0
  600. package/lib/esm/intensity-zones/intensity-zones.spec.d.ts +1 -0
  601. package/lib/esm/intensity-zones/intensity-zones.spec.js +30 -0
  602. package/lib/esm/laps/lap.d.ts +13 -0
  603. package/lib/esm/laps/lap.interface.d.ts +13 -0
  604. package/lib/esm/laps/lap.interface.js +1 -0
  605. package/lib/esm/laps/lap.js +29 -0
  606. package/lib/esm/laps/lap.json.interface.d.ts +10 -0
  607. package/lib/esm/laps/lap.json.interface.js +1 -0
  608. package/lib/esm/laps/lap.types.d.ts +46 -0
  609. package/lib/esm/laps/lap.types.js +52 -0
  610. package/lib/esm/meta-data/event-meta-data.interface.d.ts +31 -0
  611. package/lib/esm/meta-data/event-meta-data.interface.js +6 -0
  612. package/lib/esm/meta-data/meta-data.d.ts +30 -0
  613. package/lib/esm/meta-data/meta-data.js +57 -0
  614. package/lib/esm/meta-data/meta-data.json.interface.d.ts +21 -0
  615. package/lib/esm/meta-data/meta-data.json.interface.js +1 -0
  616. package/lib/esm/privacy/privacy.class.interface.d.ts +7 -0
  617. package/lib/esm/privacy/privacy.class.interface.js +5 -0
  618. package/lib/esm/serializable/serializable.class.interface.d.ts +3 -0
  619. package/lib/esm/serializable/serializable.class.interface.js +1 -0
  620. package/lib/esm/service-tokens/oauth1-service-token.interface.d.ts +6 -0
  621. package/lib/esm/service-tokens/oauth1-service-token.interface.js +1 -0
  622. package/lib/esm/service-tokens/oauth2-service-token.interface.d.ts +20 -0
  623. package/lib/esm/service-tokens/oauth2-service-token.interface.js +1 -0
  624. package/lib/esm/specs/activities-parsing.integration.spec.d.ts +1 -0
  625. package/lib/esm/specs/activities-parsing.integration.spec.js +1847 -0
  626. package/lib/esm/specs/fixtures/streams/strava/rides/3171472783.json +52534 -0
  627. package/lib/esm/specs/fixtures/streams/strava/rides/3171487458.json +78818 -0
  628. package/lib/esm/specs/fixtures/streams/strava/rides/343080886.json +105090 -0
  629. package/lib/esm/specs/fixtures/streams/strava/rides/5910143591.json +110711 -0
  630. package/lib/esm/specs/fixtures/streams/strava/runs/2451375851.json +74846 -0
  631. package/lib/esm/specs/fixtures/streams/strava/runs/2709634581.json +66817 -0
  632. package/lib/esm/specs/fixtures/streams/strava/runs/3156040843.json +17594 -0
  633. package/lib/esm/specs/fixtures/streams/strava/runs/3182900697.json +17322 -0
  634. package/lib/esm/specs/fixtures/streams/strava/runs/3183465494.json +20463 -0
  635. package/lib/esm/specs/fixtures/streams/strava/runs/3183490558.json +58202 -0
  636. package/lib/esm/specs/spec-utils.d.ts +18 -0
  637. package/lib/esm/specs/spec-utils.js +159 -0
  638. package/lib/esm/specs/strava-streams-compliance.spec.d.ts +1 -0
  639. package/lib/esm/specs/strava-streams-compliance.spec.js +951 -0
  640. package/lib/esm/stats/stats.class.abstract.d.ts +15 -0
  641. package/lib/esm/stats/stats.class.abstract.js +32 -0
  642. package/lib/esm/stats/stats.class.interface.d.ts +12 -0
  643. package/lib/esm/stats/stats.class.interface.js +1 -0
  644. package/lib/esm/stats/stats.json.interface.d.ts +0 -0
  645. package/lib/esm/stats/stats.json.interface.js +1 -0
  646. package/lib/esm/streams/compressed.stream.interface.d.ts +17 -0
  647. package/lib/esm/streams/compressed.stream.interface.js +12 -0
  648. package/lib/esm/streams/ibi-stream.d.ts +7 -0
  649. package/lib/esm/streams/ibi-stream.js +43 -0
  650. package/lib/esm/streams/low-pass.stream.filter.d.ts +6 -0
  651. package/lib/esm/streams/low-pass.stream.filter.js +9 -0
  652. package/lib/esm/streams/stream.d.ts +22 -0
  653. package/lib/esm/streams/stream.filter.interface.d.ts +3 -0
  654. package/lib/esm/streams/stream.filter.interface.js +1 -0
  655. package/lib/esm/streams/stream.interface.d.ts +73 -0
  656. package/lib/esm/streams/stream.interface.js +1 -0
  657. package/lib/esm/streams/stream.js +72 -0
  658. package/lib/esm/streams/stream.spec.d.ts +1 -0
  659. package/lib/esm/streams/stream.spec.js +168 -0
  660. package/lib/esm/tiles/tile.settings.interface.d.ts +59 -0
  661. package/lib/esm/tiles/tile.settings.interface.js +41 -0
  662. package/lib/esm/users/settings/dashboard/user.dashboard.settings.interface.d.ts +28 -0
  663. package/lib/esm/users/settings/dashboard/user.dashboard.settings.interface.js +13 -0
  664. package/lib/esm/users/settings/user.app.settings.interface.d.ts +7 -0
  665. package/lib/esm/users/settings/user.app.settings.interface.js +5 -0
  666. package/lib/esm/users/settings/user.chart.settings.interface.d.ts +50 -0
  667. package/lib/esm/users/settings/user.chart.settings.interface.js +23 -0
  668. package/lib/esm/users/settings/user.map.settings.interface.d.ts +30 -0
  669. package/lib/esm/users/settings/user.map.settings.interface.js +22 -0
  670. package/lib/esm/users/settings/user.my-tracks.settings.interface.d.ts +4 -0
  671. package/lib/esm/users/settings/user.my-tracks.settings.interface.js +1 -0
  672. package/lib/esm/users/settings/user.settings.interface.d.ts +20 -0
  673. package/lib/esm/users/settings/user.settings.interface.js +1 -0
  674. package/lib/esm/users/settings/user.stats-settings.interface.d.ts +6 -0
  675. package/lib/esm/users/settings/user.stats-settings.interface.js +1 -0
  676. package/lib/esm/users/settings/user.summaries.settings.interface.d.ts +4 -0
  677. package/lib/esm/users/settings/user.summaries.settings.interface.js +1 -0
  678. package/lib/esm/users/settings/user.unit.settings.interface.d.ts +63 -0
  679. package/lib/esm/users/settings/user.unit.settings.interface.js +73 -0
  680. package/lib/esm/users/user.account.privileges.interface.d.ts +4 -0
  681. package/lib/esm/users/user.account.privileges.interface.js +1 -0
  682. package/lib/esm/users/user.d.ts +34 -0
  683. package/lib/esm/users/user.export-to-csv.settings.interface.d.ts +3 -0
  684. package/lib/esm/users/user.export-to-csv.settings.interface.js +1 -0
  685. package/lib/esm/users/user.interface.d.ts +15 -0
  686. package/lib/esm/users/user.interface.js +1 -0
  687. package/lib/esm/users/user.js +38 -0
  688. package/lib/esm/users/user.service.meta.interface.d.ts +5 -0
  689. package/lib/esm/users/user.service.meta.interface.js +1 -0
  690. package/package.json +13 -5
  691. package/tsconfig.cjs.json +7 -0
  692. package/tsconfig.esm.json +8 -0
  693. package/lib/events/adapters/importers/fit/importer.fit.js +0 -930
  694. /package/lib/{activities → cjs/activities}/activity-parsing-options.d.ts +0 -0
  695. /package/lib/{activities → cjs/activities}/activity-parsing-options.js +0 -0
  696. /package/lib/{activities → cjs/activities}/activity.d.ts +0 -0
  697. /package/lib/{activities → cjs/activities}/activity.interface.d.ts +0 -0
  698. /package/lib/{activities → cjs/activities}/activity.interface.js +0 -0
  699. /package/lib/{activities → cjs/activities}/activity.js +0 -0
  700. /package/lib/{activities → cjs/activities}/activity.json.interface.d.ts +0 -0
  701. /package/lib/{activities → cjs/activities}/activity.json.interface.js +0 -0
  702. /package/lib/{activities → cjs/activities}/activity.types.d.ts +0 -0
  703. /package/lib/{activities → cjs/activities}/activity.types.js +0 -0
  704. /package/lib/{activities → cjs/activities}/devices/device.d.ts +0 -0
  705. /package/lib/{activities → cjs/activities}/devices/device.interface.d.ts +0 -0
  706. /package/lib/{activities → cjs/activities}/devices/device.interface.js +0 -0
  707. /package/lib/{activities → cjs/activities}/devices/device.js +0 -0
  708. /package/lib/{activities → cjs/activities}/devices/device.json.interface.d.ts +0 -0
  709. /package/lib/{activities → cjs/activities}/devices/device.json.interface.js +0 -0
  710. /package/lib/{constants → cjs/constants}/constants.d.ts +0 -0
  711. /package/lib/{constants → cjs/constants}/constants.js +0 -0
  712. /package/lib/{creators → cjs/creators}/creator.d.ts +0 -0
  713. /package/lib/{creators → cjs/creators}/creator.interface.d.ts +0 -0
  714. /package/lib/{creators → cjs/creators}/creator.interface.js +0 -0
  715. /package/lib/{creators → cjs/creators}/creator.js +0 -0
  716. /package/lib/{creators → cjs/creators}/creator.json.interface.d.ts +0 -0
  717. /package/lib/{creators → cjs/creators}/creator.json.interface.js +0 -0
  718. /package/lib/{data → cjs/data}/data-active-lap.d.ts +0 -0
  719. /package/lib/{data → cjs/data}/data-active-lap.js +0 -0
  720. /package/lib/{data → cjs/data}/data-active-lengths.d.ts +0 -0
  721. /package/lib/{data → cjs/data}/data-active-lengths.js +0 -0
  722. /package/lib/{data → cjs/data}/data-aerobic-training-effect.d.ts +0 -0
  723. /package/lib/{data → cjs/data}/data-aerobic-training-effect.js +0 -0
  724. /package/lib/{data → cjs/data}/data-anaerobic-training-effect.d.ts +0 -0
  725. /package/lib/{data → cjs/data}/data-anaerobic-training-effect.js +0 -0
  726. /package/lib/{data → cjs/data}/data-stance-time-balance-left.d.ts +0 -0
  727. /package/lib/{data → cjs/data}/data-stance-time-balance-left.js +0 -0
  728. /package/lib/{data → cjs/data}/data-stance-time-balance-right.d.ts +0 -0
  729. /package/lib/{data → cjs/data}/data-stance-time-balance-right.js +0 -0
  730. /package/lib/{data → cjs/data}/data-stance-time-balance.d.ts +0 -0
  731. /package/lib/{data → cjs/data}/data-stance-time-balance.js +0 -0
  732. /package/lib/{data → cjs/data}/data-total-cycles.d.ts +0 -0
  733. /package/lib/{data → cjs/data}/data-total-cycles.js +0 -0
  734. /package/lib/{data → cjs/data}/data.absolute-pressure.d.ts +0 -0
  735. /package/lib/{data → cjs/data}/data.absolute-pressure.js +0 -0
  736. /package/lib/{data → cjs/data}/data.accumulated-power.d.ts +0 -0
  737. /package/lib/{data → cjs/data}/data.accumulated-power.js +0 -0
  738. /package/lib/{data → cjs/data}/data.activity-types.d.ts +0 -0
  739. /package/lib/{data → cjs/data}/data.activity-types.js +0 -0
  740. /package/lib/{data → cjs/data}/data.air-power-avg.d.ts +0 -0
  741. /package/lib/{data → cjs/data}/data.air-power-avg.js +0 -0
  742. /package/lib/{data → cjs/data}/data.air-power-max.d.ts +0 -0
  743. /package/lib/{data → cjs/data}/data.air-power-max.js +0 -0
  744. /package/lib/{data → cjs/data}/data.air-power-min.d.ts +0 -0
  745. /package/lib/{data → cjs/data}/data.air-power-min.js +0 -0
  746. /package/lib/{data → cjs/data}/data.air-power.d.ts +0 -0
  747. /package/lib/{data → cjs/data}/data.air-power.js +0 -0
  748. /package/lib/{data → cjs/data}/data.alti-baro-profile.d.ts +0 -0
  749. /package/lib/{data → cjs/data}/data.alti-baro-profile.js +0 -0
  750. /package/lib/{data → cjs/data}/data.altitude-avg.d.ts +0 -0
  751. /package/lib/{data → cjs/data}/data.altitude-avg.js +0 -0
  752. /package/lib/{data → cjs/data}/data.altitude-gps.d.ts +0 -0
  753. /package/lib/{data → cjs/data}/data.altitude-gps.js +0 -0
  754. /package/lib/{data → cjs/data}/data.altitude-max.d.ts +0 -0
  755. /package/lib/{data → cjs/data}/data.altitude-max.js +0 -0
  756. /package/lib/{data → cjs/data}/data.altitude-min.d.ts +0 -0
  757. /package/lib/{data → cjs/data}/data.altitude-min.js +0 -0
  758. /package/lib/{data → cjs/data}/data.altitude-smooth.d.ts +0 -0
  759. /package/lib/{data → cjs/data}/data.altitude-smooth.js +0 -0
  760. /package/lib/{data → cjs/data}/data.altitude.d.ts +0 -0
  761. /package/lib/{data → cjs/data}/data.altitude.js +0 -0
  762. /package/lib/{data → cjs/data}/data.array.d.ts +0 -0
  763. /package/lib/{data → cjs/data}/data.array.js +0 -0
  764. /package/lib/{data → cjs/data}/data.ascent-time.d.ts +0 -0
  765. /package/lib/{data → cjs/data}/data.ascent-time.js +0 -0
  766. /package/lib/{data → cjs/data}/data.ascent.d.ts +0 -0
  767. /package/lib/{data → cjs/data}/data.ascent.js +0 -0
  768. /package/lib/{data → cjs/data}/data.auto-lap-distance.d.ts +0 -0
  769. /package/lib/{data → cjs/data}/data.auto-lap-distance.js +0 -0
  770. /package/lib/{data → cjs/data}/data.auto-lap-duration.d.ts +0 -0
  771. /package/lib/{data → cjs/data}/data.auto-lap-duration.js +0 -0
  772. /package/lib/{data → cjs/data}/data.auto-lap-used.d.ts +0 -0
  773. /package/lib/{data → cjs/data}/data.auto-lap-used.js +0 -0
  774. /package/lib/{data → cjs/data}/data.auto-pause-used.d.ts +0 -0
  775. /package/lib/{data → cjs/data}/data.auto-pause-used.js +0 -0
  776. /package/lib/{data → cjs/data}/data.avg-stride-length.d.ts +0 -0
  777. /package/lib/{data → cjs/data}/data.avg-stride-length.js +0 -0
  778. /package/lib/{data → cjs/data}/data.balance.d.ts +0 -0
  779. /package/lib/{data → cjs/data}/data.balance.js +0 -0
  780. /package/lib/{data → cjs/data}/data.bare.d.ts +0 -0
  781. /package/lib/{data → cjs/data}/data.bare.js +0 -0
  782. /package/lib/{data → cjs/data}/data.battery-charge.d.ts +0 -0
  783. /package/lib/{data → cjs/data}/data.battery-charge.js +0 -0
  784. /package/lib/{data → cjs/data}/data.battery-consumption.d.ts +0 -0
  785. /package/lib/{data → cjs/data}/data.battery-consumption.js +0 -0
  786. /package/lib/{data → cjs/data}/data.battery-current.d.ts +0 -0
  787. /package/lib/{data → cjs/data}/data.battery-current.js +0 -0
  788. /package/lib/{data → cjs/data}/data.battery-life-estimation.d.ts +0 -0
  789. /package/lib/{data → cjs/data}/data.battery-life-estimation.js +0 -0
  790. /package/lib/{data → cjs/data}/data.battery-voltage.d.ts +0 -0
  791. /package/lib/{data → cjs/data}/data.battery-voltage.js +0 -0
  792. /package/lib/{data → cjs/data}/data.bike-pod-used.d.ts +0 -0
  793. /package/lib/{data → cjs/data}/data.bike-pod-used.js +0 -0
  794. /package/lib/{data → cjs/data}/data.boolean.d.ts +0 -0
  795. /package/lib/{data → cjs/data}/data.boolean.js +0 -0
  796. /package/lib/{data → cjs/data}/data.cadence-avg.d.ts +0 -0
  797. /package/lib/{data → cjs/data}/data.cadence-avg.js +0 -0
  798. /package/lib/{data → cjs/data}/data.cadence-max.d.ts +0 -0
  799. /package/lib/{data → cjs/data}/data.cadence-max.js +0 -0
  800. /package/lib/{data → cjs/data}/data.cadence-min.d.ts +0 -0
  801. /package/lib/{data → cjs/data}/data.cadence-min.js +0 -0
  802. /package/lib/{data → cjs/data}/data.cadence.d.ts +0 -0
  803. /package/lib/{data → cjs/data}/data.cadence.js +0 -0
  804. /package/lib/{data → cjs/data}/data.cycling-dynamics.d.ts +0 -0
  805. /package/lib/{data → cjs/data}/data.cycling-dynamics.js +0 -0
  806. /package/lib/{data → cjs/data}/data.cycling-position.d.ts +0 -0
  807. /package/lib/{data → cjs/data}/data.cycling-position.js +0 -0
  808. /package/lib/{data → cjs/data}/data.cycling-seated-time.d.ts +0 -0
  809. /package/lib/{data → cjs/data}/data.cycling-seated-time.js +0 -0
  810. /package/lib/{data → cjs/data}/data.cycling-standing-time.d.ts +0 -0
  811. /package/lib/{data → cjs/data}/data.cycling-standing-time.js +0 -0
  812. /package/lib/{data → cjs/data}/data.d.ts +0 -0
  813. /package/lib/{data → cjs/data}/data.descent-time.d.ts +0 -0
  814. /package/lib/{data → cjs/data}/data.descent-time.js +0 -0
  815. /package/lib/{data → cjs/data}/data.descent.d.ts +0 -0
  816. /package/lib/{data → cjs/data}/data.descent.js +0 -0
  817. /package/lib/{data → cjs/data}/data.description.d.ts +0 -0
  818. /package/lib/{data → cjs/data}/data.description.js +0 -0
  819. /package/lib/{data → cjs/data}/data.device-location.d.ts +0 -0
  820. /package/lib/{data → cjs/data}/data.device-location.js +0 -0
  821. /package/lib/{data → cjs/data}/data.device-names.d.ts +0 -0
  822. /package/lib/{data → cjs/data}/data.device-names.js +0 -0
  823. /package/lib/{data → cjs/data}/data.distance.d.ts +0 -0
  824. /package/lib/{data → cjs/data}/data.distance.js +0 -0
  825. /package/lib/{data → cjs/data}/data.duration.d.ts +0 -0
  826. /package/lib/{data → cjs/data}/data.duration.js +0 -0
  827. /package/lib/{data → cjs/data}/data.ehpe.d.ts +0 -0
  828. /package/lib/{data → cjs/data}/data.ehpe.js +0 -0
  829. /package/lib/{data → cjs/data}/data.enabled-navigation-systems.d.ts +0 -0
  830. /package/lib/{data → cjs/data}/data.enabled-navigation-systems.js +0 -0
  831. /package/lib/{data → cjs/data}/data.end-altitude.d.ts +0 -0
  832. /package/lib/{data → cjs/data}/data.end-altitude.js +0 -0
  833. /package/lib/{data → cjs/data}/data.end-position.d.ts +0 -0
  834. /package/lib/{data → cjs/data}/data.end-position.js +0 -0
  835. /package/lib/{data → cjs/data}/data.energy.d.ts +0 -0
  836. /package/lib/{data → cjs/data}/data.energy.js +0 -0
  837. /package/lib/{data → cjs/data}/data.epoc.d.ts +0 -0
  838. /package/lib/{data → cjs/data}/data.epoc.js +0 -0
  839. /package/lib/{data → cjs/data}/data.event.d.ts +0 -0
  840. /package/lib/{data → cjs/data}/data.event.js +0 -0
  841. /package/lib/{data → cjs/data}/data.evpe.d.ts +0 -0
  842. /package/lib/{data → cjs/data}/data.evpe.js +0 -0
  843. /package/lib/{data → cjs/data}/data.feeling.d.ts +0 -0
  844. /package/lib/{data → cjs/data}/data.feeling.js +0 -0
  845. /package/lib/{data → cjs/data}/data.foot-pod-used.d.ts +0 -0
  846. /package/lib/{data → cjs/data}/data.foot-pod-used.js +0 -0
  847. /package/lib/{data → cjs/data}/data.form-power.d.ts +0 -0
  848. /package/lib/{data → cjs/data}/data.form-power.js +0 -0
  849. /package/lib/{data → cjs/data}/data.fused-altitude.d.ts +0 -0
  850. /package/lib/{data → cjs/data}/data.fused-altitude.js +0 -0
  851. /package/lib/{data → cjs/data}/data.fused-location.d.ts +0 -0
  852. /package/lib/{data → cjs/data}/data.fused-location.js +0 -0
  853. /package/lib/{data → cjs/data}/data.gnss-distance.d.ts +0 -0
  854. /package/lib/{data → cjs/data}/data.gnss-distance.js +0 -0
  855. /package/lib/{data → cjs/data}/data.grade-adjusted-pace-avg.d.ts +0 -0
  856. /package/lib/{data → cjs/data}/data.grade-adjusted-pace-avg.js +0 -0
  857. /package/lib/{data → cjs/data}/data.grade-adjusted-pace-max.d.ts +0 -0
  858. /package/lib/{data → cjs/data}/data.grade-adjusted-pace-max.js +0 -0
  859. /package/lib/{data → cjs/data}/data.grade-adjusted-pace-min.d.ts +0 -0
  860. /package/lib/{data → cjs/data}/data.grade-adjusted-pace-min.js +0 -0
  861. /package/lib/{data → cjs/data}/data.grade-adjusted-pace.d.ts +0 -0
  862. /package/lib/{data → cjs/data}/data.grade-adjusted-pace.js +0 -0
  863. /package/lib/{data → cjs/data}/data.grade-adjusted-speed-avg.d.ts +0 -0
  864. /package/lib/{data → cjs/data}/data.grade-adjusted-speed-avg.js +0 -0
  865. /package/lib/{data → cjs/data}/data.grade-adjusted-speed-max.d.ts +0 -0
  866. /package/lib/{data → cjs/data}/data.grade-adjusted-speed-max.js +0 -0
  867. /package/lib/{data → cjs/data}/data.grade-adjusted-speed-min.d.ts +0 -0
  868. /package/lib/{data → cjs/data}/data.grade-adjusted-speed-min.js +0 -0
  869. /package/lib/{data → cjs/data}/data.grade-adjusted-speed.d.ts +0 -0
  870. /package/lib/{data → cjs/data}/data.grade-adjusted-speed.js +0 -0
  871. /package/lib/{data → cjs/data}/data.grade-smooth.d.ts +0 -0
  872. /package/lib/{data → cjs/data}/data.grade-smooth.js +0 -0
  873. /package/lib/{data → cjs/data}/data.grade.d.ts +0 -0
  874. /package/lib/{data → cjs/data}/data.grade.js +0 -0
  875. /package/lib/{data → cjs/data}/data.ground-time.d.ts +0 -0
  876. /package/lib/{data → cjs/data}/data.ground-time.js +0 -0
  877. /package/lib/{data → cjs/data}/data.heart-rate-avg.d.ts +0 -0
  878. /package/lib/{data → cjs/data}/data.heart-rate-avg.js +0 -0
  879. /package/lib/{data → cjs/data}/data.heart-rate-max.d.ts +0 -0
  880. /package/lib/{data → cjs/data}/data.heart-rate-max.js +0 -0
  881. /package/lib/{data → cjs/data}/data.heart-rate-min.d.ts +0 -0
  882. /package/lib/{data → cjs/data}/data.heart-rate-min.js +0 -0
  883. /package/lib/{data → cjs/data}/data.heart-rate-used.d.ts +0 -0
  884. /package/lib/{data → cjs/data}/data.heart-rate-used.js +0 -0
  885. /package/lib/{data → cjs/data}/data.heart-rate-zone-five-duration.d.ts +0 -0
  886. /package/lib/{data → cjs/data}/data.heart-rate-zone-five-duration.js +0 -0
  887. /package/lib/{data → cjs/data}/data.heart-rate-zone-four-duration.d.ts +0 -0
  888. /package/lib/{data → cjs/data}/data.heart-rate-zone-four-duration.js +0 -0
  889. /package/lib/{data → cjs/data}/data.heart-rate-zone-one-duration.d.ts +0 -0
  890. /package/lib/{data → cjs/data}/data.heart-rate-zone-one-duration.js +0 -0
  891. /package/lib/{data → cjs/data}/data.heart-rate-zone-three-duration.d.ts +0 -0
  892. /package/lib/{data → cjs/data}/data.heart-rate-zone-three-duration.js +0 -0
  893. /package/lib/{data → cjs/data}/data.heart-rate-zone-two-duration.d.ts +0 -0
  894. /package/lib/{data → cjs/data}/data.heart-rate-zone-two-duration.js +0 -0
  895. /package/lib/{data → cjs/data}/data.heart-rate.d.ts +0 -0
  896. /package/lib/{data → cjs/data}/data.heart-rate.js +0 -0
  897. /package/lib/{data → cjs/data}/data.ibi.d.ts +0 -0
  898. /package/lib/{data → cjs/data}/data.ibi.js +0 -0
  899. /package/lib/{data → cjs/data}/data.interface.d.ts +0 -0
  900. /package/lib/{data → cjs/data}/data.interface.js +0 -0
  901. /package/lib/{data → cjs/data}/data.js +0 -0
  902. /package/lib/{data → cjs/data}/data.json.interface.d.ts +0 -0
  903. /package/lib/{data → cjs/data}/data.json.interface.js +0 -0
  904. /package/lib/{data → cjs/data}/data.latitude-degrees.d.ts +0 -0
  905. /package/lib/{data → cjs/data}/data.latitude-degrees.js +0 -0
  906. /package/lib/{data → cjs/data}/data.left-balance.d.ts +0 -0
  907. /package/lib/{data → cjs/data}/data.left-balance.js +0 -0
  908. /package/lib/{data → cjs/data}/data.leg-stiffness.d.ts +0 -0
  909. /package/lib/{data → cjs/data}/data.leg-stiffness.js +0 -0
  910. /package/lib/{data → cjs/data}/data.longitude-degrees.d.ts +0 -0
  911. /package/lib/{data → cjs/data}/data.longitude-degrees.js +0 -0
  912. /package/lib/{data → cjs/data}/data.moving-time.d.ts +0 -0
  913. /package/lib/{data → cjs/data}/data.moving-time.js +0 -0
  914. /package/lib/{data → cjs/data}/data.number-of-satellites.d.ts +0 -0
  915. /package/lib/{data → cjs/data}/data.number-of-satellites.js +0 -0
  916. /package/lib/{data → cjs/data}/data.number-of.samples.d.ts +0 -0
  917. /package/lib/{data → cjs/data}/data.number-of.samples.js +0 -0
  918. /package/lib/{data → cjs/data}/data.number.d.ts +0 -0
  919. /package/lib/{data → cjs/data}/data.number.js +0 -0
  920. /package/lib/{data → cjs/data}/data.pace-avg.d.ts +0 -0
  921. /package/lib/{data → cjs/data}/data.pace-avg.js +0 -0
  922. /package/lib/{data → cjs/data}/data.pace-max.d.ts +0 -0
  923. /package/lib/{data → cjs/data}/data.pace-max.js +0 -0
  924. /package/lib/{data → cjs/data}/data.pace-min.d.ts +0 -0
  925. /package/lib/{data → cjs/data}/data.pace-min.js +0 -0
  926. /package/lib/{data → cjs/data}/data.pace.d.ts +0 -0
  927. /package/lib/{data → cjs/data}/data.pace.js +0 -0
  928. /package/lib/{data → cjs/data}/data.pause.d.ts +0 -0
  929. /package/lib/{data → cjs/data}/data.pause.js +0 -0
  930. /package/lib/{data → cjs/data}/data.peak-epoc.d.ts +0 -0
  931. /package/lib/{data → cjs/data}/data.peak-epoc.js +0 -0
  932. /package/lib/{data → cjs/data}/data.peak-training-effect.d.ts +0 -0
  933. /package/lib/{data → cjs/data}/data.peak-training-effect.js +0 -0
  934. /package/lib/{data → cjs/data}/data.percent.d.ts +0 -0
  935. /package/lib/{data → cjs/data}/data.percent.js +0 -0
  936. /package/lib/{data → cjs/data}/data.pool-length.d.ts +0 -0
  937. /package/lib/{data → cjs/data}/data.pool-length.js +0 -0
  938. /package/lib/{data → cjs/data}/data.position.d.ts +0 -0
  939. /package/lib/{data → cjs/data}/data.position.interface.d.ts +0 -0
  940. /package/lib/{data → cjs/data}/data.position.interface.js +0 -0
  941. /package/lib/{data → cjs/data}/data.position.js +0 -0
  942. /package/lib/{data → cjs/data}/data.power-avg.d.ts +0 -0
  943. /package/lib/{data → cjs/data}/data.power-avg.js +0 -0
  944. /package/lib/{data → cjs/data}/data.power-down.d.ts +0 -0
  945. /package/lib/{data → cjs/data}/data.power-down.js +0 -0
  946. /package/lib/{data → cjs/data}/data.power-intensity-factor.d.ts +0 -0
  947. /package/lib/{data → cjs/data}/data.power-intensity-factor.js +0 -0
  948. /package/lib/{data → cjs/data}/data.power-left.d.ts +0 -0
  949. /package/lib/{data → cjs/data}/data.power-left.js +0 -0
  950. /package/lib/{data → cjs/data}/data.power-max.d.ts +0 -0
  951. /package/lib/{data → cjs/data}/data.power-max.js +0 -0
  952. /package/lib/{data → cjs/data}/data.power-min.d.ts +0 -0
  953. /package/lib/{data → cjs/data}/data.power-min.js +0 -0
  954. /package/lib/{data → cjs/data}/data.power-normalized.d.ts +0 -0
  955. /package/lib/{data → cjs/data}/data.power-normalized.js +0 -0
  956. /package/lib/{data → cjs/data}/data.power-pedal-smoothness-left.d.ts +0 -0
  957. /package/lib/{data → cjs/data}/data.power-pedal-smoothness-left.js +0 -0
  958. /package/lib/{data → cjs/data}/data.power-pedal-smoothness-right.d.ts +0 -0
  959. /package/lib/{data → cjs/data}/data.power-pedal-smoothness-right.js +0 -0
  960. /package/lib/{data → cjs/data}/data.power-pod-used.d.ts +0 -0
  961. /package/lib/{data → cjs/data}/data.power-pod-used.js +0 -0
  962. /package/lib/{data → cjs/data}/data.power-right.d.ts +0 -0
  963. /package/lib/{data → cjs/data}/data.power-right.js +0 -0
  964. /package/lib/{data → cjs/data}/data.power-torque-effectiveness-left.d.ts +0 -0
  965. /package/lib/{data → cjs/data}/data.power-torque-effectiveness-left.js +0 -0
  966. /package/lib/{data → cjs/data}/data.power-torque-effectiveness-right.d.ts +0 -0
  967. /package/lib/{data → cjs/data}/data.power-torque-effectiveness-right.js +0 -0
  968. /package/lib/{data → cjs/data}/data.power-training-stress-score.d.ts +0 -0
  969. /package/lib/{data → cjs/data}/data.power-training-stress-score.js +0 -0
  970. /package/lib/{data → cjs/data}/data.power-up.d.ts +0 -0
  971. /package/lib/{data → cjs/data}/data.power-up.js +0 -0
  972. /package/lib/{data → cjs/data}/data.power-work.d.ts +0 -0
  973. /package/lib/{data → cjs/data}/data.power-work.js +0 -0
  974. /package/lib/{data → cjs/data}/data.power-zone-five-duration.d.ts +0 -0
  975. /package/lib/{data → cjs/data}/data.power-zone-five-duration.js +0 -0
  976. /package/lib/{data → cjs/data}/data.power-zone-four-duration.d.ts +0 -0
  977. /package/lib/{data → cjs/data}/data.power-zone-four-duration.js +0 -0
  978. /package/lib/{data → cjs/data}/data.power-zone-one-duration.d.ts +0 -0
  979. /package/lib/{data → cjs/data}/data.power-zone-one-duration.js +0 -0
  980. /package/lib/{data → cjs/data}/data.power-zone-three-duration.d.ts +0 -0
  981. /package/lib/{data → cjs/data}/data.power-zone-three-duration.js +0 -0
  982. /package/lib/{data → cjs/data}/data.power-zone-two-duration.d.ts +0 -0
  983. /package/lib/{data → cjs/data}/data.power-zone-two-duration.js +0 -0
  984. /package/lib/{data → cjs/data}/data.power.d.ts +0 -0
  985. /package/lib/{data → cjs/data}/data.power.js +0 -0
  986. /package/lib/{data → cjs/data}/data.recovery-time.d.ts +0 -0
  987. /package/lib/{data → cjs/data}/data.recovery-time.js +0 -0
  988. /package/lib/{data → cjs/data}/data.rider-position-change-event.d.ts +0 -0
  989. /package/lib/{data → cjs/data}/data.rider-position-change-event.js +0 -0
  990. /package/lib/{data → cjs/data}/data.right-balance.d.ts +0 -0
  991. /package/lib/{data → cjs/data}/data.right-balance.js +0 -0
  992. /package/lib/{data → cjs/data}/data.rpe.d.ts +0 -0
  993. /package/lib/{data → cjs/data}/data.rpe.js +0 -0
  994. /package/lib/{data → cjs/data}/data.satellite-5-best-snr.d.ts +0 -0
  995. /package/lib/{data → cjs/data}/data.satellite-5-best-snr.js +0 -0
  996. /package/lib/{data → cjs/data}/data.sea-level-pressure.d.ts +0 -0
  997. /package/lib/{data → cjs/data}/data.sea-level-pressure.js +0 -0
  998. /package/lib/{data → cjs/data}/data.speed-avg.d.ts +0 -0
  999. /package/lib/{data → cjs/data}/data.speed-avg.js +0 -0
  1000. /package/lib/{data → cjs/data}/data.speed-max.d.ts +0 -0
  1001. /package/lib/{data → cjs/data}/data.speed-max.js +0 -0
  1002. /package/lib/{data → cjs/data}/data.speed-min.d.ts +0 -0
  1003. /package/lib/{data → cjs/data}/data.speed-min.js +0 -0
  1004. /package/lib/{data → cjs/data}/data.speed-zone-five-duration.d.ts +0 -0
  1005. /package/lib/{data → cjs/data}/data.speed-zone-five-duration.js +0 -0
  1006. /package/lib/{data → cjs/data}/data.speed-zone-four-duration.d.ts +0 -0
  1007. /package/lib/{data → cjs/data}/data.speed-zone-four-duration.js +0 -0
  1008. /package/lib/{data → cjs/data}/data.speed-zone-one-duration.d.ts +0 -0
  1009. /package/lib/{data → cjs/data}/data.speed-zone-one-duration.js +0 -0
  1010. /package/lib/{data → cjs/data}/data.speed-zone-three-duration.d.ts +0 -0
  1011. /package/lib/{data → cjs/data}/data.speed-zone-three-duration.js +0 -0
  1012. /package/lib/{data → cjs/data}/data.speed-zone-two-duration.d.ts +0 -0
  1013. /package/lib/{data → cjs/data}/data.speed-zone-two-duration.js +0 -0
  1014. /package/lib/{data → cjs/data}/data.speed.d.ts +0 -0
  1015. /package/lib/{data → cjs/data}/data.speed.js +0 -0
  1016. /package/lib/{data → cjs/data}/data.sport-profile-name.d.ts +0 -0
  1017. /package/lib/{data → cjs/data}/data.sport-profile-name.js +0 -0
  1018. /package/lib/{data → cjs/data}/data.stance-time.d.ts +0 -0
  1019. /package/lib/{data → cjs/data}/data.stance-time.js +0 -0
  1020. /package/lib/{data → cjs/data}/data.start-altitude.d.ts +0 -0
  1021. /package/lib/{data → cjs/data}/data.start-altitude.js +0 -0
  1022. /package/lib/{data → cjs/data}/data.start-event.d.ts +0 -0
  1023. /package/lib/{data → cjs/data}/data.start-event.js +0 -0
  1024. /package/lib/{data → cjs/data}/data.start-position.d.ts +0 -0
  1025. /package/lib/{data → cjs/data}/data.start-position.js +0 -0
  1026. /package/lib/{data → cjs/data}/data.step-length.d.ts +0 -0
  1027. /package/lib/{data → cjs/data}/data.step-length.js +0 -0
  1028. /package/lib/{data → cjs/data}/data.steps-old.d.ts +0 -0
  1029. /package/lib/{data → cjs/data}/data.steps-old.js +0 -0
  1030. /package/lib/{data → cjs/data}/data.steps.d.ts +0 -0
  1031. /package/lib/{data → cjs/data}/data.steps.js +0 -0
  1032. /package/lib/{data → cjs/data}/data.stop-all-event.d.ts +0 -0
  1033. /package/lib/{data → cjs/data}/data.stop-all-event.js +0 -0
  1034. /package/lib/{data → cjs/data}/data.stop-event.d.ts +0 -0
  1035. /package/lib/{data → cjs/data}/data.stop-event.js +0 -0
  1036. /package/lib/{data → cjs/data}/data.store.d.ts +0 -0
  1037. /package/lib/{data → cjs/data}/data.store.js +0 -0
  1038. /package/lib/{data → cjs/data}/data.string.d.ts +0 -0
  1039. /package/lib/{data → cjs/data}/data.string.js +0 -0
  1040. /package/lib/{data → cjs/data}/data.stryd-altitude.d.ts +0 -0
  1041. /package/lib/{data → cjs/data}/data.stryd-altitude.js +0 -0
  1042. /package/lib/{data → cjs/data}/data.stryd-distance.d.ts +0 -0
  1043. /package/lib/{data → cjs/data}/data.stryd-distance.js +0 -0
  1044. /package/lib/{data → cjs/data}/data.stryd-speed.d.ts +0 -0
  1045. /package/lib/{data → cjs/data}/data.stryd-speed.js +0 -0
  1046. /package/lib/{data → cjs/data}/data.swim-pace-avg.d.ts +0 -0
  1047. /package/lib/{data → cjs/data}/data.swim-pace-avg.js +0 -0
  1048. /package/lib/{data → cjs/data}/data.swim-pace-max.d.ts +0 -0
  1049. /package/lib/{data → cjs/data}/data.swim-pace-max.js +0 -0
  1050. /package/lib/{data → cjs/data}/data.swim-pace-min.d.ts +0 -0
  1051. /package/lib/{data → cjs/data}/data.swim-pace-min.js +0 -0
  1052. /package/lib/{data → cjs/data}/data.swim-pace.d.ts +0 -0
  1053. /package/lib/{data → cjs/data}/data.swim-pace.js +0 -0
  1054. /package/lib/{data → cjs/data}/data.swolf-25m.d.ts +0 -0
  1055. /package/lib/{data → cjs/data}/data.swolf-25m.js +0 -0
  1056. /package/lib/{data → cjs/data}/data.swolf-50m.d.ts +0 -0
  1057. /package/lib/{data → cjs/data}/data.swolf-50m.js +0 -0
  1058. /package/lib/{data → cjs/data}/data.target-distance.d.ts +0 -0
  1059. /package/lib/{data → cjs/data}/data.target-distance.js +0 -0
  1060. /package/lib/{data → cjs/data}/data.target-heart-rate-zone.d.ts +0 -0
  1061. /package/lib/{data → cjs/data}/data.target-heart-rate-zone.js +0 -0
  1062. /package/lib/{data → cjs/data}/data.target-power-zone.d.ts +0 -0
  1063. /package/lib/{data → cjs/data}/data.target-power-zone.js +0 -0
  1064. /package/lib/{data → cjs/data}/data.target-speed-zone.d.ts +0 -0
  1065. /package/lib/{data → cjs/data}/data.target-speed-zone.js +0 -0
  1066. /package/lib/{data → cjs/data}/data.target-time.d.ts +0 -0
  1067. /package/lib/{data → cjs/data}/data.target-time.js +0 -0
  1068. /package/lib/{data → cjs/data}/data.temperature-avg.d.ts +0 -0
  1069. /package/lib/{data → cjs/data}/data.temperature-avg.js +0 -0
  1070. /package/lib/{data → cjs/data}/data.temperature-max.d.ts +0 -0
  1071. /package/lib/{data → cjs/data}/data.temperature-max.js +0 -0
  1072. /package/lib/{data → cjs/data}/data.temperature-min.d.ts +0 -0
  1073. /package/lib/{data → cjs/data}/data.temperature-min.js +0 -0
  1074. /package/lib/{data → cjs/data}/data.temperature.d.ts +0 -0
  1075. /package/lib/{data → cjs/data}/data.temperature.js +0 -0
  1076. /package/lib/{data → cjs/data}/data.time.d.ts +0 -0
  1077. /package/lib/{data → cjs/data}/data.time.js +0 -0
  1078. /package/lib/{data → cjs/data}/data.timer-time.d.ts +0 -0
  1079. /package/lib/{data → cjs/data}/data.timer-time.js +0 -0
  1080. /package/lib/{data → cjs/data}/data.vertical-oscillation.d.ts +0 -0
  1081. /package/lib/{data → cjs/data}/data.vertical-oscillation.js +0 -0
  1082. /package/lib/{data → cjs/data}/data.vertical-ratio.d.ts +0 -0
  1083. /package/lib/{data → cjs/data}/data.vertical-ratio.js +0 -0
  1084. /package/lib/{data → cjs/data}/data.vertical-speed-avg.d.ts +0 -0
  1085. /package/lib/{data → cjs/data}/data.vertical-speed-avg.js +0 -0
  1086. /package/lib/{data → cjs/data}/data.vertical-speed-max.d.ts +0 -0
  1087. /package/lib/{data → cjs/data}/data.vertical-speed-max.js +0 -0
  1088. /package/lib/{data → cjs/data}/data.vertical-speed-min.d.ts +0 -0
  1089. /package/lib/{data → cjs/data}/data.vertical-speed-min.js +0 -0
  1090. /package/lib/{data → cjs/data}/data.vertical-speed.d.ts +0 -0
  1091. /package/lib/{data → cjs/data}/data.vertical-speed.js +0 -0
  1092. /package/lib/{data → cjs/data}/data.vo2-max.d.ts +0 -0
  1093. /package/lib/{data → cjs/data}/data.vo2-max.js +0 -0
  1094. /package/lib/{data → cjs/data}/ibi/data.ibi.d.ts +0 -0
  1095. /package/lib/{data → cjs/data}/ibi/data.ibi.filters.d.ts +0 -0
  1096. /package/lib/{data → cjs/data}/ibi/data.ibi.filters.js +0 -0
  1097. /package/lib/{data → cjs/data}/ibi/data.ibi.js +0 -0
  1098. /package/lib/{duration → cjs/duration}/duration.class.abstract.d.ts +0 -0
  1099. /package/lib/{duration → cjs/duration}/duration.class.abstract.js +0 -0
  1100. /package/lib/{duration → cjs/duration}/duration.class.interface.d.ts +0 -0
  1101. /package/lib/{duration → cjs/duration}/duration.class.interface.js +0 -0
  1102. /package/lib/{errors → cjs/errors}/duration-exceeded-event-lib.error.d.ts +0 -0
  1103. /package/lib/{errors → cjs/errors}/duration-exceeded-event-lib.error.js +0 -0
  1104. /package/lib/{errors → cjs/errors}/empty-event-sports-libs.error.d.ts +0 -0
  1105. /package/lib/{errors → cjs/errors}/empty-event-sports-libs.error.js +0 -0
  1106. /package/lib/{errors → cjs/errors}/event-lib.error.d.ts +0 -0
  1107. /package/lib/{errors → cjs/errors}/event-lib.error.js +0 -0
  1108. /package/lib/{errors → cjs/errors}/lib.error.d.ts +0 -0
  1109. /package/lib/{errors → cjs/errors}/lib.error.js +0 -0
  1110. /package/lib/{errors → cjs/errors}/parsing-event-lib.error.d.ts +0 -0
  1111. /package/lib/{errors → cjs/errors}/parsing-event-lib.error.js +0 -0
  1112. /package/lib/{events → cjs/events}/adapters/exporters/exporter.gpx.d.ts +0 -0
  1113. /package/lib/{events → cjs/events}/adapters/exporters/exporter.gpx.js +0 -0
  1114. /package/lib/{events → cjs/events}/adapters/exporters/exporter.interface.d.ts +0 -0
  1115. /package/lib/{events → cjs/events}/adapters/exporters/exporter.interface.js +0 -0
  1116. /package/lib/{events → cjs/events}/adapters/exporters/exporter.json.d.ts +0 -0
  1117. /package/lib/{events → cjs/events}/adapters/exporters/exporter.json.js +0 -0
  1118. /package/lib/{events → cjs/events}/adapters/file-type.enum.d.ts +0 -0
  1119. /package/lib/{events → cjs/events}/adapters/file-type.enum.js +0 -0
  1120. /package/lib/{events → cjs/events}/adapters/importers/fit/importer.fit.ant-plus.device.names.d.ts +0 -0
  1121. /package/lib/{events → cjs/events}/adapters/importers/fit/importer.fit.ant-plus.device.names.js +0 -0
  1122. /package/lib/{events → cjs/events}/adapters/importers/fit/importer.fit.coros.device.names.d.ts +0 -0
  1123. /package/lib/{events → cjs/events}/adapters/importers/fit/importer.fit.coros.device.names.js +0 -0
  1124. /package/lib/{events → cjs/events}/adapters/importers/fit/importer.fit.d.ts +0 -0
  1125. /package/lib/{events → cjs/events}/adapters/importers/fit/importer.fit.development.device.names.d.ts +0 -0
  1126. /package/lib/{events → cjs/events}/adapters/importers/fit/importer.fit.development.device.names.js +0 -0
  1127. /package/lib/{events → cjs/events}/adapters/importers/fit/importer.fit.garmin.device.names.d.ts +0 -0
  1128. /package/lib/{events → cjs/events}/adapters/importers/fit/importer.fit.garmin.device.names.js +0 -0
  1129. /package/lib/{events → cjs/events}/adapters/importers/fit/importer.fit.hammerhead.device.names.d.ts +0 -0
  1130. /package/lib/{events → cjs/events}/adapters/importers/fit/importer.fit.hammerhead.device.names.js +0 -0
  1131. /package/lib/{events → cjs/events}/adapters/importers/fit/importer.fit.lezyne.device.names.d.ts +0 -0
  1132. /package/lib/{events → cjs/events}/adapters/importers/fit/importer.fit.lezyne.device.names.js +0 -0
  1133. /package/lib/{events → cjs/events}/adapters/importers/fit/importer.fit.magellan.device.names.d.ts +0 -0
  1134. /package/lib/{events → cjs/events}/adapters/importers/fit/importer.fit.magellan.device.names.js +0 -0
  1135. /package/lib/{events → cjs/events}/adapters/importers/fit/importer.fit.mapper.d.ts +0 -0
  1136. /package/lib/{events → cjs/events}/adapters/importers/fit/importer.fit.mapper.js +0 -0
  1137. /package/lib/{events → cjs/events}/adapters/importers/fit/importer.fit.saris.device.names.d.ts +0 -0
  1138. /package/lib/{events → cjs/events}/adapters/importers/fit/importer.fit.saris.device.names.js +0 -0
  1139. /package/lib/{events → cjs/events}/adapters/importers/fit/importer.fit.srm.device.names.d.ts +0 -0
  1140. /package/lib/{events → cjs/events}/adapters/importers/fit/importer.fit.srm.device.names.js +0 -0
  1141. /package/lib/{events → cjs/events}/adapters/importers/fit/importer.fit.suunto.device.names.d.ts +0 -0
  1142. /package/lib/{events → cjs/events}/adapters/importers/fit/importer.fit.suunto.device.names.js +0 -0
  1143. /package/lib/{events → cjs/events}/adapters/importers/fit/importer.fit.wahoo.device.names.d.ts +0 -0
  1144. /package/lib/{events → cjs/events}/adapters/importers/fit/importer.fit.wahoo.device.names.js +0 -0
  1145. /package/lib/{events → cjs/events}/adapters/importers/gpx/gx-parser.d.ts +0 -0
  1146. /package/lib/{events → cjs/events}/adapters/importers/gpx/gx-parser.js +0 -0
  1147. /package/lib/{events → cjs/events}/adapters/importers/gpx/importer.gpx.d.ts +0 -0
  1148. /package/lib/{events → cjs/events}/adapters/importers/gpx/importer.gpx.js +0 -0
  1149. /package/lib/{events → cjs/events}/adapters/importers/gpx/importer.gpx.mapper.d.ts +0 -0
  1150. /package/lib/{events → cjs/events}/adapters/importers/gpx/importer.gpx.mapper.js +0 -0
  1151. /package/lib/{events → cjs/events}/adapters/importers/json/importer.json.d.ts +0 -0
  1152. /package/lib/{events → cjs/events}/adapters/importers/json/importer.json.js +0 -0
  1153. /package/lib/{events → cjs/events}/adapters/importers/sample-info.interface.d.ts +0 -0
  1154. /package/lib/{events → cjs/events}/adapters/importers/sample-info.interface.js +0 -0
  1155. /package/lib/{events → cjs/events}/adapters/importers/suunto/importer.suunto.activity.ids.d.ts +0 -0
  1156. /package/lib/{events → cjs/events}/adapters/importers/suunto/importer.suunto.activity.ids.js +0 -0
  1157. /package/lib/{events → cjs/events}/adapters/importers/suunto/importer.suunto.device.names.d.ts +0 -0
  1158. /package/lib/{events → cjs/events}/adapters/importers/suunto/importer.suunto.device.names.js +0 -0
  1159. /package/lib/{events → cjs/events}/adapters/importers/suunto/importer.suunto.json.d.ts +0 -0
  1160. /package/lib/{events → cjs/events}/adapters/importers/suunto/importer.suunto.json.js +0 -0
  1161. /package/lib/{events → cjs/events}/adapters/importers/suunto/importer.suunto.sml.d.ts +0 -0
  1162. /package/lib/{events → cjs/events}/adapters/importers/suunto/importer.suunto.sml.js +0 -0
  1163. /package/lib/{events → cjs/events}/adapters/importers/tcx/importer.tcx.d.ts +0 -0
  1164. /package/lib/{events → cjs/events}/adapters/importers/tcx/importer.tcx.js +0 -0
  1165. /package/lib/{events → cjs/events}/adapters/importers/tcx/importer.tcx.mapper.d.ts +0 -0
  1166. /package/lib/{events → cjs/events}/adapters/importers/tcx/importer.tcx.mapper.js +0 -0
  1167. /package/lib/{events → cjs/events}/adapters/importers/tcx/utils.tcx.d.ts +0 -0
  1168. /package/lib/{events → cjs/events}/adapters/importers/tcx/utils.tcx.js +0 -0
  1169. /package/lib/{events → cjs/events}/event.d.ts +0 -0
  1170. /package/lib/{events → cjs/events}/event.interface.d.ts +0 -0
  1171. /package/lib/{events → cjs/events}/event.interface.js +0 -0
  1172. /package/lib/{events → cjs/events}/event.js +0 -0
  1173. /package/lib/{events → cjs/events}/event.json.interface.d.ts +0 -0
  1174. /package/lib/{events → cjs/events}/event.json.interface.js +0 -0
  1175. /package/lib/{events → cjs/events}/utilities/activity.utilities.d.ts +0 -0
  1176. /package/lib/{events → cjs/events}/utilities/activity.utilities.js +0 -0
  1177. /package/lib/{events → cjs/events}/utilities/event.utilities.d.ts +0 -0
  1178. /package/lib/{events → cjs/events}/utilities/event.utilities.js +0 -0
  1179. /package/lib/{events → cjs/events}/utilities/grade-calculator/grade-calculator.d.ts +0 -0
  1180. /package/lib/{events → cjs/events}/utilities/grade-calculator/grade-calculator.js +0 -0
  1181. /package/lib/{events → cjs/events}/utilities/grade-calculator/low-pass-filter.d.ts +0 -0
  1182. /package/lib/{events → cjs/events}/utilities/grade-calculator/low-pass-filter.js +0 -0
  1183. /package/lib/{events → cjs/events}/utilities/helpers.d.ts +0 -0
  1184. /package/lib/{events → cjs/events}/utilities/helpers.js +0 -0
  1185. /package/lib/{geodesy → cjs/geodesy}/adapters/adapter.interface.d.ts +0 -0
  1186. /package/lib/{geodesy → cjs/geodesy}/adapters/adapter.interface.js +0 -0
  1187. /package/lib/{geodesy → cjs/geodesy}/adapters/geolib.adapter.d.ts +0 -0
  1188. /package/lib/{geodesy → cjs/geodesy}/adapters/geolib.adapter.js +0 -0
  1189. /package/lib/{id → cjs/id}/id.abstract.class.d.ts +0 -0
  1190. /package/lib/{id → cjs/id}/id.abstract.class.js +0 -0
  1191. /package/lib/{id → cjs/id}/id.class.interface.d.ts +0 -0
  1192. /package/lib/{id → cjs/id}/id.class.interface.js +0 -0
  1193. /package/lib/{index.d.ts → cjs/index.d.ts} +0 -0
  1194. /package/lib/{index.js → cjs/index.js} +0 -0
  1195. /package/lib/{intensity-zones → cjs/intensity-zones}/intensity-zones.d.ts +0 -0
  1196. /package/lib/{intensity-zones → cjs/intensity-zones}/intensity-zones.interface.d.ts +0 -0
  1197. /package/lib/{intensity-zones → cjs/intensity-zones}/intensity-zones.interface.js +0 -0
  1198. /package/lib/{intensity-zones → cjs/intensity-zones}/intensity-zones.js +0 -0
  1199. /package/lib/{intensity-zones → cjs/intensity-zones}/intensity-zones.json.interface.d.ts +0 -0
  1200. /package/lib/{intensity-zones → cjs/intensity-zones}/intensity-zones.json.interface.js +0 -0
  1201. /package/lib/{laps → cjs/laps}/lap.d.ts +0 -0
  1202. /package/lib/{laps → cjs/laps}/lap.interface.d.ts +0 -0
  1203. /package/lib/{laps → cjs/laps}/lap.interface.js +0 -0
  1204. /package/lib/{laps → cjs/laps}/lap.js +0 -0
  1205. /package/lib/{laps → cjs/laps}/lap.json.interface.d.ts +0 -0
  1206. /package/lib/{laps → cjs/laps}/lap.json.interface.js +0 -0
  1207. /package/lib/{laps → cjs/laps}/lap.types.d.ts +0 -0
  1208. /package/lib/{laps → cjs/laps}/lap.types.js +0 -0
  1209. /package/lib/{meta-data → cjs/meta-data}/event-meta-data.interface.d.ts +0 -0
  1210. /package/lib/{meta-data → cjs/meta-data}/event-meta-data.interface.js +0 -0
  1211. /package/lib/{meta-data → cjs/meta-data}/meta-data.d.ts +0 -0
  1212. /package/lib/{meta-data → cjs/meta-data}/meta-data.js +0 -0
  1213. /package/lib/{meta-data → cjs/meta-data}/meta-data.json.interface.d.ts +0 -0
  1214. /package/lib/{meta-data → cjs/meta-data}/meta-data.json.interface.js +0 -0
  1215. /package/lib/{privacy → cjs/privacy}/privacy.class.interface.d.ts +0 -0
  1216. /package/lib/{privacy → cjs/privacy}/privacy.class.interface.js +0 -0
  1217. /package/lib/{serializable → cjs/serializable}/serializable.class.interface.d.ts +0 -0
  1218. /package/lib/{serializable → cjs/serializable}/serializable.class.interface.js +0 -0
  1219. /package/lib/{service-tokens → cjs/service-tokens}/oauth1-service-token.interface.d.ts +0 -0
  1220. /package/lib/{service-tokens → cjs/service-tokens}/oauth1-service-token.interface.js +0 -0
  1221. /package/lib/{service-tokens → cjs/service-tokens}/oauth2-service-token.interface.d.ts +0 -0
  1222. /package/lib/{service-tokens → cjs/service-tokens}/oauth2-service-token.interface.js +0 -0
  1223. /package/lib/{stats → cjs/stats}/stats.class.abstract.d.ts +0 -0
  1224. /package/lib/{stats → cjs/stats}/stats.class.abstract.js +0 -0
  1225. /package/lib/{stats → cjs/stats}/stats.class.interface.d.ts +0 -0
  1226. /package/lib/{stats → cjs/stats}/stats.class.interface.js +0 -0
  1227. /package/lib/{stats → cjs/stats}/stats.json.interface.d.ts +0 -0
  1228. /package/lib/{stats → cjs/stats}/stats.json.interface.js +0 -0
  1229. /package/lib/{streams → cjs/streams}/compressed.stream.interface.d.ts +0 -0
  1230. /package/lib/{streams → cjs/streams}/compressed.stream.interface.js +0 -0
  1231. /package/lib/{streams → cjs/streams}/ibi-stream.d.ts +0 -0
  1232. /package/lib/{streams → cjs/streams}/ibi-stream.js +0 -0
  1233. /package/lib/{streams → cjs/streams}/low-pass.stream.filter.d.ts +0 -0
  1234. /package/lib/{streams → cjs/streams}/low-pass.stream.filter.js +0 -0
  1235. /package/lib/{streams → cjs/streams}/stream.d.ts +0 -0
  1236. /package/lib/{streams → cjs/streams}/stream.filter.interface.d.ts +0 -0
  1237. /package/lib/{streams → cjs/streams}/stream.filter.interface.js +0 -0
  1238. /package/lib/{streams → cjs/streams}/stream.interface.d.ts +0 -0
  1239. /package/lib/{streams → cjs/streams}/stream.interface.js +0 -0
  1240. /package/lib/{streams → cjs/streams}/stream.js +0 -0
  1241. /package/lib/{tiles → cjs/tiles}/tile.settings.interface.d.ts +0 -0
  1242. /package/lib/{tiles → cjs/tiles}/tile.settings.interface.js +0 -0
  1243. /package/lib/{users → cjs/users}/settings/dashboard/user.dashboard.settings.interface.d.ts +0 -0
  1244. /package/lib/{users → cjs/users}/settings/dashboard/user.dashboard.settings.interface.js +0 -0
  1245. /package/lib/{users → cjs/users}/settings/user.app.settings.interface.d.ts +0 -0
  1246. /package/lib/{users → cjs/users}/settings/user.app.settings.interface.js +0 -0
  1247. /package/lib/{users → cjs/users}/settings/user.chart.settings.interface.d.ts +0 -0
  1248. /package/lib/{users → cjs/users}/settings/user.chart.settings.interface.js +0 -0
  1249. /package/lib/{users → cjs/users}/settings/user.map.settings.interface.d.ts +0 -0
  1250. /package/lib/{users → cjs/users}/settings/user.map.settings.interface.js +0 -0
  1251. /package/lib/{users → cjs/users}/settings/user.my-tracks.settings.interface.d.ts +0 -0
  1252. /package/lib/{users → cjs/users}/settings/user.my-tracks.settings.interface.js +0 -0
  1253. /package/lib/{users → cjs/users}/settings/user.settings.interface.d.ts +0 -0
  1254. /package/lib/{users → cjs/users}/settings/user.settings.interface.js +0 -0
  1255. /package/lib/{users → cjs/users}/settings/user.stats-settings.interface.d.ts +0 -0
  1256. /package/lib/{users → cjs/users}/settings/user.stats-settings.interface.js +0 -0
  1257. /package/lib/{users → cjs/users}/settings/user.summaries.settings.interface.d.ts +0 -0
  1258. /package/lib/{users → cjs/users}/settings/user.summaries.settings.interface.js +0 -0
  1259. /package/lib/{users → cjs/users}/settings/user.unit.settings.interface.d.ts +0 -0
  1260. /package/lib/{users → cjs/users}/settings/user.unit.settings.interface.js +0 -0
  1261. /package/lib/{users → cjs/users}/user.account.privileges.interface.d.ts +0 -0
  1262. /package/lib/{users → cjs/users}/user.account.privileges.interface.js +0 -0
  1263. /package/lib/{users → cjs/users}/user.d.ts +0 -0
  1264. /package/lib/{users → cjs/users}/user.export-to-csv.settings.interface.d.ts +0 -0
  1265. /package/lib/{users → cjs/users}/user.export-to-csv.settings.interface.js +0 -0
  1266. /package/lib/{users → cjs/users}/user.interface.d.ts +0 -0
  1267. /package/lib/{users → cjs/users}/user.interface.js +0 -0
  1268. /package/lib/{users → cjs/users}/user.js +0 -0
  1269. /package/lib/{users → cjs/users}/user.service.meta.interface.d.ts +0 -0
  1270. /package/lib/{users → cjs/users}/user.service.meta.interface.js +0 -0
@@ -0,0 +1,1814 @@
1
+ import { DataHeartRate } from '../../data/data.heart-rate';
2
+ import { DataCadence } from '../../data/data.cadence';
3
+ import { DataSpeed } from '../../data/data.speed';
4
+ import { DataVerticalSpeed } from '../../data/data.vertical-speed';
5
+ import { DataTemperature } from '../../data/data.temperature';
6
+ import { DataAltitude } from '../../data/data.altitude';
7
+ import { DataPower } from '../../data/data.power';
8
+ import { DataAltitudeMax } from '../../data/data.altitude-max';
9
+ import { DataAltitudeMin } from '../../data/data.altitude-min';
10
+ import { DataAltitudeAvg } from '../../data/data.altitude-avg';
11
+ import { DataHeartRateMax } from '../../data/data.heart-rate-max';
12
+ import { DataHeartRateMin } from '../../data/data.heart-rate-min';
13
+ import { DataHeartRateAvg } from '../../data/data.heart-rate-avg';
14
+ import { DataCadenceMax } from '../../data/data.cadence-max';
15
+ import { DataCadenceMin } from '../../data/data.cadence-min';
16
+ import { DataCadenceAvg } from '../../data/data.cadence-avg';
17
+ import { DataSpeedMax, DataSpeedMaxFeetPerMinute, DataSpeedMaxFeetPerSecond, DataSpeedMaxKilometersPerHour, DataSpeedMaxKnots, DataSpeedMaxMetersPerMinute, DataSpeedMaxMilesPerHour } from '../../data/data.speed-max';
18
+ import { DataSpeedMin, DataSpeedMinFeetPerMinute, DataSpeedMinFeetPerSecond, DataSpeedMinKilometersPerHour, DataSpeedMinKnots, DataSpeedMinMetersPerMinute, DataSpeedMinMilesPerHour } from '../../data/data.speed-min';
19
+ import { DataSpeedAvg, DataSpeedAvgFeetPerMinute, DataSpeedAvgFeetPerSecond, DataSpeedAvgKilometersPerHour, DataSpeedAvgKnots, DataSpeedAvgMetersPerMinute, DataSpeedAvgMilesPerHour } from '../../data/data.speed-avg';
20
+ import { DataVerticalSpeedMax, DataVerticalSpeedMaxFeetPerHour, DataVerticalSpeedMaxFeetPerMinute, DataVerticalSpeedMaxFeetPerSecond, DataVerticalSpeedMaxKilometerPerHour, DataVerticalSpeedMaxMetersPerHour, DataVerticalSpeedMaxMetersPerMinute, DataVerticalSpeedMaxMilesPerHour } from '../../data/data.vertical-speed-max';
21
+ import { DataVerticalSpeedMin, DataVerticalSpeedMinFeetPerHour, DataVerticalSpeedMinFeetPerMinute, DataVerticalSpeedMinFeetPerSecond, DataVerticalSpeedMinKilometerPerHour, DataVerticalSpeedMinMetersPerHour, DataVerticalSpeedMinMetersPerMinute, DataVerticalSpeedMinMilesPerHour } from '../../data/data.vertical-speed-min';
22
+ import { DataVerticalSpeedAvg, DataVerticalSpeedAvgFeetPerHour, DataVerticalSpeedAvgFeetPerMinute, DataVerticalSpeedAvgFeetPerSecond, DataVerticalSpeedAvgKilometerPerHour, DataVerticalSpeedAvgMetersPerHour, DataVerticalSpeedAvgMetersPerMinute, DataVerticalSpeedAvgMilesPerHour } from '../../data/data.vertical-speed-avg';
23
+ import { DataPowerMax } from '../../data/data.power-max';
24
+ import { DataPowerMin } from '../../data/data.power-min';
25
+ import { DataPowerAvg } from '../../data/data.power-avg';
26
+ import { DataTemperatureMax } from '../../data/data.temperature-max';
27
+ import { DataTemperatureMin } from '../../data/data.temperature-min';
28
+ import { DataTemperatureAvg } from '../../data/data.temperature-avg';
29
+ import { DataDistance } from '../../data/data.distance';
30
+ import { DataDuration } from '../../data/data.duration';
31
+ import { DataPause } from '../../data/data.pause';
32
+ import { DataAscent } from '../../data/data.ascent';
33
+ import { DataDescent } from '../../data/data.descent';
34
+ import { GeoLibAdapter } from '../../geodesy/adapters/geolib.adapter';
35
+ import { DataPaceMax, DataPaceMaxMinutesPerMile } from '../../data/data.pace-max';
36
+ import { DataPace } from '../../data/data.pace';
37
+ import { DataPaceMin, DataPaceMinMinutesPerMile } from '../../data/data.pace-min';
38
+ import { DataPaceAvg, DataPaceAvgMinutesPerMile } from '../../data/data.pace-avg';
39
+ import { DataBatteryCharge } from '../../data/data.battery-charge';
40
+ import { DataBatteryConsumption } from '../../data/data.battery-consumption';
41
+ import { DataBatteryLifeEstimation } from '../../data/data.battery-life-estimation';
42
+ import { DataLatitudeDegrees } from '../../data/data.latitude-degrees';
43
+ import { Stream } from '../../streams/stream';
44
+ import { convertPaceToPaceInMinutesPerMile, convertSpeedToPace, convertSpeedToSpeedInFeetPerHour, convertSpeedToSpeedInFeetPerMinute, convertSpeedToSpeedInFeetPerSecond, convertSpeedToSpeedInKilometersPerHour, convertSpeedToSpeedInKnots, convertSpeedToSpeedInMetersPerHour, convertSpeedToSpeedInMetersPerMinute, convertSpeedToSpeedInMilesPerHour, convertSpeedToSwimPace, convertSwimPaceToSwimPacePer100Yard, isNumber, isNumberOrString, medianFilter, standardDeviation } from './helpers';
45
+ import { DataLongitudeDegrees } from '../../data/data.longitude-degrees';
46
+ import { DataEnergy } from '../../data/data.energy';
47
+ import { DataStartAltitude } from '../../data/data.start-altitude';
48
+ import { DataEndAltitude } from '../../data/data.end-altitude';
49
+ import { DataSwimPaceMax, DataSwimPaceMaxMinutesPer100Yard } from '../../data/data.swim-pace-max';
50
+ import { DataSwimPace } from '../../data/data.swim-pace';
51
+ import { DataSwimPaceMin, DataSwimPaceMinMinutesPer100Yard } from '../../data/data.swim-pace-min';
52
+ import { DataSwimPaceAvg, DataSwimPaceAvgMinutesPer100Yard } from '../../data/data.swim-pace-avg';
53
+ import { DataFeeling } from '../../data/data.feeling';
54
+ import { DataPowerLeft } from '../../data/data.power-left';
55
+ import { DataRightBalance } from '../../data/data.right-balance';
56
+ import { DataLeftBalance } from '../../data/data.left-balance';
57
+ import { DataPowerRight } from '../../data/data.power-right';
58
+ import { DataAirPowerMin } from '../../data/data.air-power-min';
59
+ import { DataAirPower } from '../../data/data.air-power';
60
+ import { DataAirPowerMax } from '../../data/data.air-power-max';
61
+ import { DataAirPowerAvg } from '../../data/data.air-power-avg';
62
+ import { DataRPE } from '../../data/data.rpe';
63
+ import { DataGNSSDistance } from '../../data/data.gnss-distance';
64
+ import { DataHeartRateZoneOneDuration } from '../../data/data.heart-rate-zone-one-duration';
65
+ import { DataHeartRateZoneTwoDuration } from '../../data/data.heart-rate-zone-two-duration';
66
+ import { DataHeartRateZoneThreeDuration } from '../../data/data.heart-rate-zone-three-duration';
67
+ import { DataHeartRateZoneFourDuration } from '../../data/data.heart-rate-zone-four-duration';
68
+ import { DataHeartRateZoneFiveDuration } from '../../data/data.heart-rate-zone-five-duration';
69
+ import { DataPowerZoneOneDuration } from '../../data/data.power-zone-one-duration';
70
+ import { DataPowerZoneTwoDuration } from '../../data/data.power-zone-two-duration';
71
+ import { DataPowerZoneThreeDuration } from '../../data/data.power-zone-three-duration';
72
+ import { DataPowerZoneFourDuration } from '../../data/data.power-zone-four-duration';
73
+ import { DataPowerZoneFiveDuration } from '../../data/data.power-zone-five-duration';
74
+ import { DataSpeedZoneOneDuration } from '../../data/data.speed-zone-one-duration';
75
+ import { DataSpeedZoneTwoDuration } from '../../data/data.speed-zone-two-duration';
76
+ import { DataSpeedZoneThreeDuration } from '../../data/data.speed-zone-three-duration';
77
+ import { DataSpeedZoneFourDuration } from '../../data/data.speed-zone-four-duration';
78
+ import { DataSpeedZoneFiveDuration } from '../../data/data.speed-zone-five-duration';
79
+ import { DynamicDataLoader } from '../../data/data.store';
80
+ import { DataStartPosition } from '../../data/data.start-position';
81
+ import { DataEndPosition } from '../../data/data.end-position';
82
+ import { DataGradeAdjustedSpeedAvg, DataGradeAdjustedSpeedAvgFeetPerMinute, DataGradeAdjustedSpeedAvgFeetPerSecond, DataGradeAdjustedSpeedAvgKilometersPerHour, DataGradeAdjustedSpeedAvgKnots, DataGradeAdjustedSpeedAvgMetersPerMinute, DataGradeAdjustedSpeedAvgMilesPerHour } from '../../data/data.grade-adjusted-speed-avg';
83
+ import { DataGradeAdjustedPaceAvg, DataGradeAdjustedPaceAvgMinutesPerMile } from '../../data/data.grade-adjusted-pace-avg';
84
+ import { DataGradeAdjustedSpeed } from '../../data/data.grade-adjusted-speed';
85
+ import { DataGradeAdjustedPace } from '../../data/data.grade-adjusted-pace';
86
+ import { DataGradeAdjustedSpeedMax, DataGradeAdjustedSpeedMaxFeetPerMinute, DataGradeAdjustedSpeedMaxFeetPerSecond, DataGradeAdjustedSpeedMaxKilometersPerHour, DataGradeAdjustedSpeedMaxKnots, DataGradeAdjustedSpeedMaxMetersPerMinute, DataGradeAdjustedSpeedMaxMilesPerHour } from '../../data/data.grade-adjusted-speed-max';
87
+ import { DataGradeAdjustedSpeedMin, DataGradeAdjustedSpeedMinFeetPerMinute, DataGradeAdjustedSpeedMinFeetPerSecond, DataGradeAdjustedSpeedMinKilometersPerHour, DataGradeAdjustedSpeedMinKnots, DataGradeAdjustedSpeedMinMetersPerMinute, DataGradeAdjustedSpeedMinMilesPerHour } from '../../data/data.grade-adjusted-speed-min';
88
+ import { DataGradeAdjustedPaceMax, DataGradeAdjustedPaceMaxMinutesPerMile } from '../../data/data.grade-adjusted-pace-max';
89
+ import { DataGradeAdjustedPaceMin, DataGradeAdjustedPaceMinMinutesPerMile } from '../../data/data.grade-adjusted-pace-min';
90
+ import { DataGrade } from '../../data/data.grade';
91
+ import { ActivityTypeGroups, ActivityTypes, ActivityTypesHelper, ActivityTypesMoving } from '../../activities/activity.types';
92
+ import { DataMovingTime } from '../../data/data.moving-time';
93
+ import { DataTimerTime } from '../../data/data.timer-time';
94
+ import { DataAltitudeSmooth } from '../../data/data.altitude-smooth';
95
+ import { DataGradeSmooth } from '../../data/data.grade-smooth';
96
+ import { DataSWOLF25m } from '../../data/data.swolf-25m';
97
+ import { DataSWOLF50m } from '../../data/data.swolf-50m';
98
+ import { DataStanceTimeBalanceLeft } from '../../data/data-stance-time-balance-left';
99
+ import { DataStanceTimeBalanceRight } from '../../data/data-stance-time-balance-right';
100
+ import { LowPassFilter } from './grade-calculator/low-pass-filter';
101
+ import { DataPowerNormalized } from '../../data/data.power-normalized';
102
+ import { DataPowerWork } from '../../data/data.power-work';
103
+ import { GradeCalculator } from './grade-calculator/grade-calculator';
104
+ const KalmanFilter = require('kalmanjs');
105
+ /* Configure filtering values */
106
+ // Altitude stream
107
+ const ALTITUDE_SPIKES_FILTER_WIN = 3;
108
+ // Fix abnormal streams
109
+ const SPEED_STREAM_STD_DEV_THRESHOLD_DEFAULT = 25 / 3.6; // Kph to mps
110
+ const SPEED_STREAM_STD_DEV_THRESHOLD_MAP = new Map([
111
+ [ActivityTypeGroups.Running, 15 / 3.6],
112
+ [ActivityTypeGroups.Cycling, 27 / 3.6],
113
+ [ActivityTypeGroups.Swimming, 5 / 3.6] // kph to m/s
114
+ ]);
115
+ export class ActivityUtilities {
116
+ /**
117
+ * Provide average from laps a given stat type
118
+ */
119
+ static getDataTypeAvgFromLaps(activity, statType, filterOver) {
120
+ const data = activity
121
+ .getLaps()
122
+ .map(lap => { var _a; return (_a = lap.getStat(statType)) === null || _a === void 0 ? void 0 : _a.getValue(); })
123
+ .filter(d => Number.isFinite(d) && (Number.isFinite(filterOver) ? d > filterOver : true));
124
+ if (data.length > 0) {
125
+ return this.getAverage(data);
126
+ }
127
+ return null;
128
+ }
129
+ /**
130
+ * Provide average of a given stream type
131
+ */
132
+ static getDataTypeAvg(activity, streamType, startDate, endDate, filterOver) {
133
+ const data = (activity
134
+ .getSquashedStreamData(streamType, startDate, endDate)
135
+ .filter(streamData => streamData !== Infinity &&
136
+ streamData !== -Infinity &&
137
+ (Number.isFinite(filterOver) ? streamData > filterOver : true)));
138
+ return this.getAverage(data);
139
+ }
140
+ static round(value, decimals = 0) {
141
+ const decimalsFactor = Math.pow(10, decimals);
142
+ return Math.round(value * decimalsFactor) / decimalsFactor;
143
+ }
144
+ static getAverage(data) {
145
+ return this.getSum(data) / data.length;
146
+ }
147
+ static getSum(data) {
148
+ return data.reduce((sumbuff, value) => {
149
+ sumbuff += value;
150
+ return sumbuff;
151
+ }, 0);
152
+ }
153
+ static getDataTypeMax(activity, streamType, startDate, endDate) {
154
+ return this.getActivityDataTypeMinOrMax(activity, streamType, true, startDate, endDate);
155
+ }
156
+ static getDataTypeMin(activity, streamType, startDate, endDate, filterOver) {
157
+ return this.getActivityDataTypeMinOrMax(activity, streamType, false, startDate, endDate, filterOver);
158
+ }
159
+ static getDataTypeMinToMaxDifference(activity, streamType, startDate, endDate) {
160
+ return (this.getDataTypeMax(activity, streamType, startDate, endDate) -
161
+ this.getDataTypeMin(activity, streamType, startDate, endDate));
162
+ }
163
+ static getDataTypeFirst(activity, streamType, startDate, endDate) {
164
+ const data = activity.getSquashedStreamData(streamType, startDate, endDate);
165
+ return data[0];
166
+ }
167
+ static getDataTypeLast(activity, streamType, startDate, endDate) {
168
+ const data = activity.getSquashedStreamData(streamType, startDate, endDate);
169
+ return data[data.length - 1];
170
+ }
171
+ static cropDistance(startDistance, endDistance, activity) {
172
+ // Short to do the search just in case
173
+ let startDistanceDate; // Does not sound right
174
+ let endDistanceDate;
175
+ // debugger;
176
+ activity.getStreamData(DataDistance.type).forEach((distanceFromData, index) => {
177
+ // Find the index with greater dinstnce and convert it to time
178
+ if (startDistance && !startDistanceDate && distanceFromData && distanceFromData >= startDistance) {
179
+ startDistanceDate = new Date(activity.startDate.getTime() + index * 1000);
180
+ return;
181
+ }
182
+ // Same for end
183
+ if (endDistance && !endDistanceDate && distanceFromData && distanceFromData >= endDistance) {
184
+ endDistanceDate = new Date(activity.startDate.getTime() + index * 1000);
185
+ return;
186
+ }
187
+ });
188
+ if (!startDistanceDate && !endDistanceDate) {
189
+ return activity;
190
+ }
191
+ activity = this.cropTime(activity, startDistanceDate, endDistanceDate);
192
+ // Remove because it is invalid, you cannot just offset the distance as a stream I think
193
+ const distanceStream = activity.getAllStreams().find(s => DataDistance.type === s.type);
194
+ if (distanceStream) {
195
+ activity.removeStream(distanceStream);
196
+ }
197
+ const gnssDistanceStream = activity.getAllStreams().find(s => DataGNSSDistance.type === s.type);
198
+ if (gnssDistanceStream) {
199
+ activity.removeStream(gnssDistanceStream);
200
+ }
201
+ return activity;
202
+ }
203
+ /**
204
+ * Crops left,right on time.
205
+ * Start and end date need to be relative to the activity start / end time
206
+ * @param activity
207
+ * @param startDate
208
+ * @param endDate
209
+ */
210
+ static cropTime(activity, startDate, endDate) {
211
+ activity.getAllStreams().forEach(stream => {
212
+ // Get the data for the range specified
213
+ const trimmedStreamData = activity.getStreamData(stream.type, startDate, endDate);
214
+ activity.removeStream(stream);
215
+ activity.addStream(new Stream(stream.type, trimmedStreamData));
216
+ });
217
+ activity.startDate = startDate || activity.startDate;
218
+ activity.endDate = endDate || activity.endDate;
219
+ // debugger
220
+ return activity;
221
+ }
222
+ static getStreamDataTypesBasedOnDataType(streamToBaseOn, streams) {
223
+ return streamToBaseOn.getData().reduce((accu, streamDataItem, index) => {
224
+ if (!isNumberOrString(streamDataItem)) {
225
+ return accu;
226
+ }
227
+ const dataItem = {
228
+ [streamToBaseOn.type]: streamDataItem
229
+ };
230
+ streams.forEach(stream => {
231
+ dataItem[stream.type] = stream.getData()[index];
232
+ });
233
+ accu.push(dataItem);
234
+ return accu;
235
+ }, []);
236
+ }
237
+ static getStreamDataTypesBasedOnTime(startDate, endDate, streams) {
238
+ const streamDataBasedOnTime = {};
239
+ for (let i = 0; i < this.getDataLength(startDate, endDate); i++) {
240
+ // Perhaps this can be optimized with a search function
241
+ streams.forEach((stream) => {
242
+ if (isNumber(stream.getData()[i])) {
243
+ streamDataBasedOnTime[startDate.getTime() + i * 1000] =
244
+ streamDataBasedOnTime[startDate.getTime() + i * 1000] || {};
245
+ streamDataBasedOnTime[startDate.getTime() + i * 1000][stream.type] = stream.getData()[i];
246
+ }
247
+ });
248
+ }
249
+ return streamDataBasedOnTime;
250
+ }
251
+ static getDataLength(startDate, endDate) {
252
+ return Math.ceil((+endDate - +startDate) / 1000) + 1;
253
+ }
254
+ static generateMissingStreamsAndStatsForActivity(activity) {
255
+ this.generateMissingStreams(activity);
256
+ this.fixAbnormalStreamData(activity);
257
+ this.generateMissingStatsForActivity(activity);
258
+ this.generateMissingSpeedDerivedStatsForActivity(activity);
259
+ this.generateMissingUnitStatsForActivity(activity); // Perhaps this needs to happen on user level so needs to go out of here
260
+ }
261
+ static fixAbnormalStreamData(activity) {
262
+ var _a, _b, _c;
263
+ // Check if fix abnormal speed option has been enable and if we have stream data and position data (e.g. do not fix for swim pool activities)
264
+ if (((_c = (_b = (_a = activity.parseOptions) === null || _a === void 0 ? void 0 : _a.streams) === null || _b === void 0 ? void 0 : _b.fixAbnormal) === null || _c === void 0 ? void 0 : _c.speed) &&
265
+ activity.hasStreamData(DataSpeed.type) &&
266
+ activity.hasStreamData(DataLatitudeDegrees.type) &&
267
+ activity.hasStreamData(DataLongitudeDegrees.type)) {
268
+ // Check for speed data dispersion using standard deviation
269
+ const speedStdDev = standardDeviation(activity.getSquashedStreamData(DataSpeed.type));
270
+ // Get speed standard deviation threshold at which we will attempt to fix the stream
271
+ const stdDevThreshold = SPEED_STREAM_STD_DEV_THRESHOLD_MAP.get(ActivityTypesHelper.getActivityGroupForActivityType(activity.type)) ||
272
+ SPEED_STREAM_STD_DEV_THRESHOLD_DEFAULT;
273
+ if (speedStdDev > stdDevThreshold) {
274
+ // Fix/Predict speed stream through Kalman filtering
275
+ this.shapeStream(DataSpeed.type, activity, squashedSpeedData => {
276
+ // Grade stream
277
+ const SPEED_KALMAN_SMOOTHING = {
278
+ R: 0.01,
279
+ Q: speedStdDev * 2 // We intend to get a measurement error which can be under and over std dev (explaining the double factor)
280
+ };
281
+ // Apply kalman filter
282
+ const kf = new KalmanFilter(SPEED_KALMAN_SMOOTHING);
283
+ return squashedSpeedData.map(v => (v === null ? null : kf.filter(v)));
284
+ });
285
+ }
286
+ }
287
+ }
288
+ static generateMissingStreams(activity) {
289
+ // Compute missing streams
290
+ this.generateMissingStreamsForActivity(activity);
291
+ activity.addStreams(this.createUnitStreamsFromStreams(activity.getAllStreams(), activity.type));
292
+ }
293
+ static getSummaryStatsForActivities(activities) {
294
+ const stats = [];
295
+ // If only one
296
+ if (activities.length === 1) {
297
+ return activities[0].getStatsAsArray();
298
+ }
299
+ let duration = 0;
300
+ let ascent = 0;
301
+ let descent = 0;
302
+ let energy = 0;
303
+ let distance = 0;
304
+ let pauseTime = 0;
305
+ let averageHeartRate = 0;
306
+ let averagePower = 0;
307
+ let averageCadence = 0;
308
+ let averageSpeed = 0;
309
+ let averageGradeAdjustedSpeed = 0;
310
+ let averagePace = 0;
311
+ let averageGradeAdjustedPace = 0;
312
+ let averageSwimPace = 0;
313
+ let averageTemperature = 0;
314
+ let averageFeeling = 0;
315
+ let averageRPE = 0;
316
+ // Sum Duration
317
+ activities.forEach(activity => {
318
+ duration += activity.getDuration().getValue();
319
+ });
320
+ stats.push(new DataDuration(duration));
321
+ // Sum pause time
322
+ activities.forEach(activity => {
323
+ pauseTime += activity.getPause().getValue();
324
+ });
325
+ stats.push(new DataPause(pauseTime));
326
+ // Sum Distance
327
+ activities.forEach(activity => {
328
+ distance += activity.getDistance().getValue();
329
+ });
330
+ stats.push(new DataDistance(distance));
331
+ // Sum ascent
332
+ activities.forEach(activity => {
333
+ const activityAscent = activity.getStat(DataAscent.type);
334
+ if (activityAscent) {
335
+ ascent += activityAscent.getValue();
336
+ }
337
+ });
338
+ stats.push(new DataAscent(ascent));
339
+ // Sum descent
340
+ activities.forEach(activity => {
341
+ const activityDescent = activity.getStat(DataDescent.type);
342
+ if (activityDescent) {
343
+ descent += activityDescent.getValue();
344
+ }
345
+ });
346
+ stats.push(new DataDescent(descent));
347
+ // Sum energy
348
+ activities.forEach(activity => {
349
+ const activityEnergy = activity.getStat(DataEnergy.type);
350
+ if (activityEnergy) {
351
+ energy += activityEnergy.getValue();
352
+ }
353
+ });
354
+ stats.push(new DataEnergy(energy));
355
+ // Avg Avg HR
356
+ activities.forEach(activity => {
357
+ const activityAvgHeartRate = activity.getStat(DataHeartRateAvg.type);
358
+ if (activityAvgHeartRate) {
359
+ // The below will fallback for 0
360
+ averageHeartRate = averageHeartRate
361
+ ? (averageHeartRate + activityAvgHeartRate.getValue()) / 2
362
+ : activityAvgHeartRate.getValue();
363
+ }
364
+ });
365
+ if (averageHeartRate) {
366
+ stats.push(new DataHeartRateAvg(averageHeartRate));
367
+ }
368
+ // Avg Avg HR
369
+ activities.forEach(activity => {
370
+ const activityAvgHeartRate = activity.getStat(DataHeartRateAvg.type);
371
+ if (activityAvgHeartRate) {
372
+ // The below will fallback for 0
373
+ averageHeartRate = averageHeartRate
374
+ ? (averageHeartRate + activityAvgHeartRate.getValue()) / 2
375
+ : activityAvgHeartRate.getValue();
376
+ }
377
+ });
378
+ if (averageHeartRate) {
379
+ stats.push(new DataHeartRateAvg(averageHeartRate));
380
+ }
381
+ // Avg Avg Power
382
+ activities.forEach(activity => {
383
+ const activityAvgPower = activity.getStat(DataPowerAvg.type);
384
+ if (activityAvgPower) {
385
+ // The below will fallback for 0
386
+ averagePower = averagePower
387
+ ? (averagePower + activityAvgPower.getValue()) / 2
388
+ : activityAvgPower.getValue();
389
+ }
390
+ });
391
+ if (averagePower) {
392
+ stats.push(new DataPowerAvg(averagePower));
393
+ }
394
+ // Avg Avg Cadence
395
+ activities.forEach(activity => {
396
+ const activityAvgCadence = activity.getStat(DataCadenceAvg.type);
397
+ if (activityAvgCadence) {
398
+ // The below will fallback for 0
399
+ averageCadence = averageCadence
400
+ ? (averageCadence + activityAvgCadence.getValue()) / 2
401
+ : activityAvgCadence.getValue();
402
+ }
403
+ });
404
+ if (averageCadence) {
405
+ stats.push(new DataCadenceAvg(averageCadence));
406
+ }
407
+ // Avg Avg Speed
408
+ activities.forEach(activity => {
409
+ const activityAvgSpeed = activity.getStat(DataSpeedAvg.type);
410
+ if (activityAvgSpeed) {
411
+ // The below will fallback for 0
412
+ averageSpeed = averageSpeed
413
+ ? (averageSpeed + activityAvgSpeed.getValue()) / 2
414
+ : activityAvgSpeed.getValue();
415
+ }
416
+ });
417
+ if (averageSpeed) {
418
+ stats.push(new DataSpeedAvg(averageSpeed));
419
+ }
420
+ // Avg Avg Gap Speed
421
+ activities.forEach(activity => {
422
+ const activityAvgGradeAdjustedSpeed = activity.getStat(DataGradeAdjustedSpeedAvg.type);
423
+ if (activityAvgGradeAdjustedSpeed) {
424
+ // The below will fallback for 0
425
+ averageGradeAdjustedSpeed = averageGradeAdjustedSpeed
426
+ ? (averageGradeAdjustedSpeed + activityAvgGradeAdjustedSpeed.getValue()) / 2
427
+ : activityAvgGradeAdjustedSpeed.getValue();
428
+ }
429
+ });
430
+ if (averageGradeAdjustedSpeed) {
431
+ stats.push(new DataGradeAdjustedSpeedAvg(averageGradeAdjustedSpeed));
432
+ }
433
+ // Avg Avg Pace
434
+ activities.forEach(activity => {
435
+ const activityAvgPace = activity.getStat(DataPaceAvg.type);
436
+ if (activityAvgPace) {
437
+ // The below will fallback for 0
438
+ averagePace = averagePace
439
+ ? (averagePace + activityAvgPace.getValue()) / 2
440
+ : activityAvgPace.getValue();
441
+ }
442
+ });
443
+ if (averagePace) {
444
+ stats.push(new DataPaceAvg(averagePace));
445
+ }
446
+ // Avg Avg GAP Pace
447
+ activities.forEach(activity => {
448
+ const activityAvgGradeAdjustedPace = activity.getStat(DataGradeAdjustedPaceAvg.type);
449
+ if (activityAvgGradeAdjustedPace) {
450
+ // The below will fallback for 0
451
+ averageGradeAdjustedPace = averageGradeAdjustedPace
452
+ ? (averageGradeAdjustedPace + activityAvgGradeAdjustedPace.getValue()) / 2
453
+ : activityAvgGradeAdjustedPace.getValue();
454
+ }
455
+ });
456
+ if (averageGradeAdjustedPace) {
457
+ stats.push(new DataGradeAdjustedPaceAvg(averageGradeAdjustedPace));
458
+ }
459
+ // Avg Avg SwimPace
460
+ activities.forEach(activity => {
461
+ const activityAvgSwimPace = activity.getStat(DataSwimPaceAvg.type);
462
+ if (activityAvgSwimPace) {
463
+ // The below will fallback for 0
464
+ averageSwimPace = averageSwimPace
465
+ ? (averageSwimPace + activityAvgSwimPace.getValue()) / 2
466
+ : activityAvgSwimPace.getValue();
467
+ }
468
+ });
469
+ if (averageSwimPace) {
470
+ stats.push(new DataSwimPaceAvg(averageSwimPace));
471
+ }
472
+ // Avg Avg Temperature
473
+ activities.forEach(activity => {
474
+ const activityAvgTemperature = activity.getStat(DataTemperatureAvg.type);
475
+ if (activityAvgTemperature) {
476
+ // The below will fallback for 0
477
+ averageTemperature = averageTemperature
478
+ ? (averageTemperature + activityAvgTemperature.getValue()) / 2
479
+ : activityAvgTemperature.getValue();
480
+ }
481
+ });
482
+ if (averageTemperature) {
483
+ stats.push(new DataTemperatureAvg(averageTemperature));
484
+ }
485
+ // Avg Feeling
486
+ activities.forEach(activity => {
487
+ const activityAvgFeeling = activity.getStat(DataFeeling.type);
488
+ if (activityAvgFeeling) {
489
+ // The below will fallback for 0
490
+ averageFeeling = averageFeeling
491
+ ? Math.ceil((averageFeeling + activityAvgFeeling.getValue()) / 2)
492
+ : activityAvgFeeling.getValue();
493
+ }
494
+ });
495
+ if (averageFeeling) {
496
+ stats.push(new DataFeeling(averageFeeling));
497
+ }
498
+ // Avg RPE
499
+ activities.forEach(activity => {
500
+ const activityAvgRPE = activity.getStat(DataFeeling.type);
501
+ if (activityAvgRPE) {
502
+ // The below will fallback for 0
503
+ averageRPE = averageRPE
504
+ ? Math.ceil((averageRPE + activityAvgRPE.getValue()) / 2)
505
+ : activityAvgRPE.getValue();
506
+ }
507
+ });
508
+ if (averageRPE) {
509
+ stats.push(new DataRPE(averageRPE));
510
+ }
511
+ stats.push(...this.getIntensityZonesStatsAggregated(activities));
512
+ // Add start and end position
513
+ // This expects the to be sorted
514
+ const activitiesWithStartPosition = activities.filter(activity => activity.getStat(DataStartPosition.type));
515
+ const activitiesWithEndPosition = activities.filter(activity => activity.getStat(DataEndPosition.type));
516
+ if (activitiesWithStartPosition && activitiesWithStartPosition.length) {
517
+ const startPositionStat = activitiesWithStartPosition[0].getStat(DataStartPosition.type);
518
+ stats.push(new DataStartPosition(startPositionStat.getValue()));
519
+ }
520
+ if (activitiesWithEndPosition && activitiesWithEndPosition.length) {
521
+ const endPositionStat = (activitiesWithEndPosition[activitiesWithEndPosition.length - 1].getStat(DataEndPosition.type));
522
+ stats.push(new DataEndPosition(endPositionStat.getValue()));
523
+ }
524
+ // debugger;
525
+ return stats;
526
+ }
527
+ static getIntensityZonesStatsAggregated(statClassInstances) {
528
+ return [
529
+ DataHeartRateZoneOneDuration.type,
530
+ DataHeartRateZoneTwoDuration.type,
531
+ DataHeartRateZoneThreeDuration.type,
532
+ DataHeartRateZoneFourDuration.type,
533
+ DataHeartRateZoneFiveDuration.type,
534
+ DataPowerZoneOneDuration.type,
535
+ DataPowerZoneTwoDuration.type,
536
+ DataPowerZoneThreeDuration.type,
537
+ DataPowerZoneFourDuration.type,
538
+ DataPowerZoneFiveDuration.type,
539
+ DataSpeedZoneOneDuration.type,
540
+ DataSpeedZoneTwoDuration.type,
541
+ DataSpeedZoneThreeDuration.type,
542
+ DataSpeedZoneFourDuration.type,
543
+ DataSpeedZoneFiveDuration.type
544
+ ].reduce((statsArray, zone) => {
545
+ const zoneDuration = statClassInstances.reduce((duration, statClassInstance) => {
546
+ const durationStat = statClassInstance.getStat(zone);
547
+ if (durationStat) {
548
+ duration = duration || 0;
549
+ duration += durationStat.getValue();
550
+ }
551
+ return duration;
552
+ }, null);
553
+ if (isNumber(zoneDuration)) {
554
+ statsArray.push(DynamicDataLoader.getDataInstanceFromDataType(zone, zoneDuration));
555
+ }
556
+ return statsArray;
557
+ }, []);
558
+ }
559
+ static getActivityDataTypeGain(activity, streamType, starDate, endDate, minDiff) {
560
+ return this.getActivityDataTypeGainOrLoss(activity, streamType, true, starDate, endDate, minDiff);
561
+ }
562
+ static getActivityDataTypeLoss(activity, streamType, starDate, endDate, minDiff) {
563
+ return this.getActivityDataTypeGainOrLoss(activity, streamType, false, starDate, endDate, minDiff);
564
+ }
565
+ static getGainOrLoss(data, gain, minDiff = 2) {
566
+ let gainOrLoss = 0;
567
+ if (!(data === null || data === void 0 ? void 0 : data.length)) {
568
+ return null;
569
+ }
570
+ data.reduce((previousValue, nextValue) => {
571
+ // For gain
572
+ if (gain) {
573
+ // Increase the gain if eligible first check to be greater plus diff [200, 300, 400, 100, 101, 102]
574
+ if (previousValue + minDiff <= nextValue) {
575
+ gainOrLoss += nextValue - previousValue;
576
+ return nextValue;
577
+ }
578
+ // if not eligible check if smaller without the diff and if yes do not register it and send it back as the last to check against
579
+ if (previousValue < nextValue) {
580
+ return previousValue;
581
+ }
582
+ return nextValue;
583
+ }
584
+ // For Loss
585
+ if (previousValue - minDiff >= nextValue) {
586
+ gainOrLoss += previousValue - nextValue;
587
+ return nextValue;
588
+ }
589
+ // if not eligible check if smaller without the diff and if yes do not register it and send it back as the last to check against
590
+ if (previousValue > nextValue) {
591
+ return previousValue;
592
+ }
593
+ return nextValue;
594
+ }, data[0]);
595
+ return gainOrLoss;
596
+ }
597
+ static getMax(data) {
598
+ return data.reduce((previousValue, currentValue) => Math.max(previousValue, currentValue), -Infinity);
599
+ }
600
+ static getMin(data) {
601
+ return data.reduce((previousValue, currentValue) => Math.min(previousValue, currentValue), Infinity);
602
+ }
603
+ static calculateTotalDistanceForActivity(activity, startDate, endDate) {
604
+ return this.geoLibAdapter.getDistance(activity.getPositionData(startDate, endDate).filter(position => position !== null));
605
+ }
606
+ /**
607
+ * Returns streams that derive from speed based on the activity type
608
+ * @param speedStream
609
+ * @param activityType
610
+ */
611
+ static createByActivityTypeSpeedBasedStreams(speedStream, activityType) {
612
+ return ActivityTypesHelper.speedDerivedDataTypesToUseForActivityType(activityType).reduce((array, dataType) => {
613
+ switch (dataType) {
614
+ case DataPace.type:
615
+ return array.concat([
616
+ new Stream(DataPace.type, speedStream.getData().map(dataValue => {
617
+ if (!isNumber(dataValue)) {
618
+ return null;
619
+ }
620
+ return convertSpeedToPace(dataValue);
621
+ }))
622
+ ]);
623
+ case DataSwimPace.type:
624
+ return array.concat([
625
+ new Stream(DataSwimPace.type, speedStream.getData().map(dataValue => {
626
+ if (!isNumber(dataValue)) {
627
+ return null;
628
+ }
629
+ return convertSpeedToSwimPace(dataValue);
630
+ }))
631
+ ]);
632
+ case DataSpeed.type:
633
+ return array.concat(speedStream);
634
+ default:
635
+ return array;
636
+ }
637
+ }, []);
638
+ }
639
+ /**
640
+ * Returns streams that derive from grade adjusted speed based on the activity type
641
+ * @param gradeAdjustedSpeedStream
642
+ * @param activityType
643
+ */
644
+ static createByActivityTypeAltiDistanceSpeedBasedStreams(gradeAdjustedSpeedStream, activityType) {
645
+ return ActivityTypesHelper.altiDistanceSpeedDerivedDataTypesToUseForActivityType(activityType).reduce((array, dataType) => {
646
+ switch (dataType) {
647
+ case DataGradeAdjustedPace.type:
648
+ return array.concat([
649
+ new Stream(DataGradeAdjustedPace.type, gradeAdjustedSpeedStream.getData().map(dataValue => {
650
+ if (!isNumber(dataValue)) {
651
+ return null;
652
+ }
653
+ return convertSpeedToPace(dataValue);
654
+ }))
655
+ ]);
656
+ case DataGradeAdjustedSpeed.type:
657
+ return array.concat(gradeAdjustedSpeedStream);
658
+ default:
659
+ return array;
660
+ }
661
+ }, []);
662
+ }
663
+ /**
664
+ * @todo unit test (get the pun?)
665
+ * This creates streams that are deriving as unit based streams
666
+ * For example it will create pace from speed, swim pace from speed but also speed in km/h as a unitstream
667
+ * @param streams
668
+ * @param activityType
669
+ * @param unitStreamTypes DynamicDataLoader.allUnitDerivedDataTypes this acts like a whitelist for the unit derived units ONLY!
670
+ */
671
+ static createUnitStreamsFromStreams(streams, activityType, unitStreamTypes) {
672
+ // @todo perhaps check input to be unitStreamTypesStrictly
673
+ const unitStreamTypesToCreate = unitStreamTypes || DynamicDataLoader.allUnitDerivedDataTypes;
674
+ let baseUnitStreams = [];
675
+ const speedStream = streams.find(stream => stream.type === DataSpeed.type);
676
+ if (speedStream) {
677
+ baseUnitStreams = baseUnitStreams.concat(this.createByActivityTypeSpeedBasedStreams(speedStream, activityType));
678
+ }
679
+ const gradeAdjustedSpeedStream = streams.find(stream => stream.type === DataGradeAdjustedSpeed.type);
680
+ if (gradeAdjustedSpeedStream) {
681
+ baseUnitStreams = baseUnitStreams.concat(this.createByActivityTypeAltiDistanceSpeedBasedStreams(gradeAdjustedSpeedStream, activityType));
682
+ }
683
+ const verticalSpeedStream = streams.find(stream => stream.type === DataVerticalSpeed.type);
684
+ if (verticalSpeedStream) {
685
+ // For vertical speed (yet) we dont need a seperate function so just add the base that is the "derived" one
686
+ baseUnitStreams = ActivityTypesHelper.verticalSpeedDerivedDataTypesToUseForActivityType(activityType).length
687
+ ? baseUnitStreams.concat(verticalSpeedStream)
688
+ : baseUnitStreams;
689
+ }
690
+ // @todo add distance ?
691
+ const startWith = baseUnitStreams.filter(baseUnitStream => unitStreamTypesToCreate.indexOf(baseUnitStream.type) !== -1 && streams.indexOf(baseUnitStream) === -1);
692
+ return Object.keys(DynamicDataLoader.dataTypeUnitGroups).reduce((array, baseDataType) => {
693
+ const baseStream = baseUnitStreams.find(stream => stream.type === baseDataType);
694
+ if (!baseStream) {
695
+ return array;
696
+ }
697
+ const unitStreams = Object.keys(DynamicDataLoader.dataTypeUnitGroups[baseDataType])
698
+ .filter(unitBasedDataType => unitStreamTypesToCreate.indexOf(unitBasedDataType) !== -1) // @todo perhaps dont filter
699
+ .map(unitBasedDataType => {
700
+ return new Stream(unitBasedDataType, baseStream.getData().map(dataValue => {
701
+ if (!isNumber(dataValue)) {
702
+ return null;
703
+ }
704
+ return DynamicDataLoader.dataTypeUnitGroups[baseDataType][unitBasedDataType](dataValue);
705
+ }));
706
+ });
707
+ return array.concat(unitStreams);
708
+ }, startWith);
709
+ }
710
+ /**
711
+ * Generates missing streams for an activity such as distance etc if they are missing
712
+ * This will always create a steam even if the distance is 0
713
+ * @param activity
714
+ */
715
+ static generateMissingStreamsForActivity(activity) {
716
+ var _a, _b, _c, _d, _e, _f;
717
+ // Create derived primitive streams which will be needed for others streams & stats computations
718
+ this.createDerivedStreams(activity);
719
+ // First add any missing data to the streams via interpolating and extrapolating
720
+ this.addMissingDataToStreams(activity);
721
+ if (activity.hasStreamData(DataLatitudeDegrees.type) &&
722
+ activity.hasStreamData(DataLongitudeDegrees.type) &&
723
+ (!activity.hasStreamData(DataDistance.type) || !activity.hasStreamData(DataGNSSDistance.type))) {
724
+ const streamData = activity.createStream(DataDistance.type).getData(); // Creating does not add it to activity just presets the resolution to 1s
725
+ let distance = 0;
726
+ streamData[0] = distance; // Force first distance sample to be equal to 0 instead of null
727
+ activity
728
+ .getPositionData()
729
+ .reduce((prevPosition, position, index) => {
730
+ if (!position) {
731
+ return prevPosition;
732
+ }
733
+ if (prevPosition && position) {
734
+ distance += this.round(this.geoLibAdapter.getDistance([prevPosition, position]), 2);
735
+ }
736
+ streamData[index] = distance;
737
+ return position;
738
+ });
739
+ if (!activity.hasStreamData(DataDistance.type)) {
740
+ activity.addStream(new Stream(DataDistance.type, streamData));
741
+ }
742
+ if (!activity.hasStreamData(DataGNSSDistance.type)) {
743
+ activity.addStream(new Stream(DataGNSSDistance.type, streamData));
744
+ }
745
+ if (!activity.hasStreamData(DataSpeed.type)) {
746
+ const speedStreamData = activity.createStream(DataSpeed.type).getData();
747
+ const distanceStream = activity.getStreamDataByDuration(DataDistance.type);
748
+ let previousDistanceItem;
749
+ distanceStream.forEach((distanceItem, index) => {
750
+ // Use the first distance item value if previous distance is unknown
751
+ if (!previousDistanceItem) {
752
+ previousDistanceItem = distanceItem;
753
+ }
754
+ // If know distance then compute speed from last known distance item
755
+ if (Number.isFinite(distanceItem.value)) {
756
+ const deltaTime = (distanceItem.time - previousDistanceItem.time) / 1000;
757
+ const deltaDistance = (distanceItem === null || distanceItem === void 0 ? void 0 : distanceItem.value) ? distanceItem.value - ((previousDistanceItem === null || previousDistanceItem === void 0 ? void 0 : previousDistanceItem.value) || 0) : 0;
758
+ speedStreamData[index] = this.round(deltaTime > 0 ? deltaDistance / deltaTime : 0, 3);
759
+ // Keep tracking of last know distance item
760
+ previousDistanceItem = distanceItem;
761
+ }
762
+ else {
763
+ speedStreamData[index] = null;
764
+ }
765
+ });
766
+ activity.addStream(new Stream(DataSpeed.type, speedStreamData));
767
+ }
768
+ }
769
+ // Check if we can get a grade stream
770
+ if (((_c = (_b = (_a = activity.parseOptions) === null || _a === void 0 ? void 0 : _a.streams) === null || _b === void 0 ? void 0 : _b.smooth) === null || _c === void 0 ? void 0 : _c.grade) &&
771
+ !activity.hasStreamData(DataGrade.type) &&
772
+ activity.hasStreamData(DataDistance.type) &&
773
+ (activity.hasStreamData(DataAltitudeSmooth.type) || activity.hasStreamData(DataAltitude.type))) {
774
+ const distanceData = activity.getStreamData(DataDistance.type);
775
+ const altitudeData = activity.getStreamData(activity.hasStreamData(DataAltitudeSmooth.type) ? DataAltitudeSmooth.type : DataAltitude.type);
776
+ // Create the grade stream from time, distance and altitude non-squashed streams
777
+ const timeData = activity.generateTimeStream([DataDistance.type]);
778
+ const gradeStreamData = GradeCalculator.computeGradeStream(timeData.getData(), distanceData, altitudeData);
779
+ // Append new grade stream to activity
780
+ activity.addStream(new Stream(DataGrade.type, gradeStreamData));
781
+ if ((_f = (_e = (_d = activity.parseOptions) === null || _d === void 0 ? void 0 : _d.streams) === null || _e === void 0 ? void 0 : _e.smooth) === null || _f === void 0 ? void 0 : _f.gradeSmooth) {
782
+ // Duplicate and create an altitude smooth stream (we want to keep original altitude stream available)
783
+ // Activity stats and grade adjusted speed will be computed on the smoothed altitude stream
784
+ this.cloneStream(activity, DataGrade.type, DataGradeSmooth.type);
785
+ // Smooth grade computed stream
786
+ this.shapeStream(DataGradeSmooth.type, activity, squashedGradeData => {
787
+ // Grade stream
788
+ const GRADE_KALMAN_SMOOTHING = {
789
+ R: 0.01,
790
+ Q: 0.5 // Grade measurement error which can be expected
791
+ };
792
+ // Predict proper grade values
793
+ const kf = new KalmanFilter(GRADE_KALMAN_SMOOTHING);
794
+ return squashedGradeData.map(v => (v === null ? null : kf.filter(v)));
795
+ });
796
+ }
797
+ }
798
+ // Get a grade adjusted speed (the model applies to running only)
799
+ if ((ActivityTypesHelper.getActivityGroupForActivityType(activity.type) === ActivityTypeGroups.Running ||
800
+ ActivityTypesHelper.getActivityGroupForActivityType(activity.type) === ActivityTypeGroups.TrailRunning) &&
801
+ !activity.hasStreamData(DataGradeAdjustedSpeed.type) &&
802
+ activity.hasStreamData(DataGradeSmooth.type) &&
803
+ activity.hasStreamData(DataSpeed.type)) {
804
+ const speedStreamData = activity.getStreamData(DataSpeed.type);
805
+ const gradeStreamData = activity.getStreamData(DataGradeSmooth.type);
806
+ const gradeAdjustedSpeedData = speedStreamData.map((value, index) => value === null ? null : this.round(GradeCalculator.estimateAdjustedSpeed(value, gradeStreamData[index] || 0), 2));
807
+ // Ensure first grade adjusted pace dont start with 0 (it's common) meaning infinity
808
+ if (!gradeAdjustedSpeedData[0]) {
809
+ const firstKnownValue = gradeAdjustedSpeedData.find(v => v > 0);
810
+ gradeAdjustedSpeedData[0] = firstKnownValue ? firstKnownValue : gradeAdjustedSpeedData[0];
811
+ }
812
+ activity.addStream(new Stream(DataGradeAdjustedSpeed.type, gradeAdjustedSpeedData));
813
+ }
814
+ if (activity.hasStreamData(DataPower.type) &&
815
+ activity.hasStreamData(DataRightBalance.type) &&
816
+ !activity.hasStreamData(DataPowerRight.type)) {
817
+ const rightPowerStream = activity.createStream(DataPowerRight.type);
818
+ const powerStreamData = activity.getStreamData(DataPower.type);
819
+ const rightBalanceStreamData = activity.getStreamData(DataRightBalance.type);
820
+ rightPowerStream.setData(rightBalanceStreamData.reduce((accu, streamData, index) => {
821
+ const powerStreamDataItem = powerStreamData[index];
822
+ if (streamData === null || !powerStreamData || powerStreamDataItem === null) {
823
+ return accu;
824
+ }
825
+ accu[index] = (streamData / 100) * powerStreamDataItem;
826
+ return accu;
827
+ }, []));
828
+ activity.addStream(rightPowerStream);
829
+ }
830
+ if (activity.hasStreamData(DataPower.type) &&
831
+ activity.hasStreamData(DataLeftBalance.type) &&
832
+ !activity.hasStreamData(DataPowerLeft.type)) {
833
+ const leftPowerStream = activity.createStream(DataPowerLeft.type);
834
+ const powerStreamData = activity.getStreamData(DataPower.type);
835
+ const leftBalanceStreamData = activity.getStreamData(DataLeftBalance.type);
836
+ leftPowerStream.setData(leftBalanceStreamData.reduce((accu, streamData, index) => {
837
+ const powerStreamDataItem = powerStreamData[index];
838
+ if (streamData === null || !powerStreamData || powerStreamDataItem === null) {
839
+ return accu;
840
+ }
841
+ accu[index] = (streamData / 100) * powerStreamDataItem;
842
+ return accu;
843
+ }, []));
844
+ activity.addStream(leftPowerStream);
845
+ }
846
+ // If left stance time stream available, then add the right balance stream too
847
+ if (activity.hasStreamData(DataStanceTimeBalanceLeft.type)) {
848
+ const rightStanceBalanceTimeStream = activity.createStream(DataStanceTimeBalanceRight.type);
849
+ const leftStanceBalanceTimeStream = activity.getStreamData(DataStanceTimeBalanceLeft.type);
850
+ const rightStanceBalanceTimeData = leftStanceBalanceTimeStream.map(leftBalance => {
851
+ return Number.isFinite(leftBalance) ? 100 - leftBalance : null;
852
+ });
853
+ rightStanceBalanceTimeStream.setData(rightStanceBalanceTimeData);
854
+ activity.addStream(rightStanceBalanceTimeStream);
855
+ }
856
+ return activity;
857
+ }
858
+ /**
859
+ * Provides squashed stream data through callback for data manipulation.
860
+ * Then rebuild the stream based on duration including the missing values (null, Infinity, ...) like the source stream
861
+ * @param streamType
862
+ * @param activity
863
+ * @param shapeStreamData
864
+ */
865
+ static shapeStream(streamType, activity, shapeStreamData) {
866
+ let streamDataByDuration = activity.getStreamDataByDuration(streamType, true, true);
867
+ // Shape data along function param
868
+ const streamData = shapeStreamData(streamDataByDuration.map(item => item.value));
869
+ // Update streamDataByDuration with shaped data
870
+ streamDataByDuration = streamDataByDuration.map((item, index) => {
871
+ item.value = streamData[index];
872
+ return item;
873
+ });
874
+ // Rebuild/replace stream with new shaped value
875
+ activity.removeStream(streamType);
876
+ activity.addStream(activity.createStream(streamType));
877
+ const activityStartTime = activity.startDate.getTime();
878
+ streamDataByDuration.forEach(item => {
879
+ activity.addDataToStream(streamType, new Date(activityStartTime + item.time), item.value);
880
+ });
881
+ }
882
+ static cloneStream(activity, sourceStreamType, targetStreamType) {
883
+ const sourceStream = activity.getStream(sourceStreamType);
884
+ const targetStream = activity.createStream(targetStreamType);
885
+ targetStream.setData(Array.from(sourceStream.getData())); // Shallow copy data to new stream
886
+ activity.addStream(targetStream);
887
+ }
888
+ /**
889
+ * Create derived primitive streams which will be needed for others streams & stats computations
890
+ * @param activity
891
+ */
892
+ static createDerivedStreams(activity) {
893
+ var _a, _b, _c;
894
+ if (((_c = (_b = (_a = activity.parseOptions) === null || _a === void 0 ? void 0 : _a.streams) === null || _b === void 0 ? void 0 : _b.smooth) === null || _c === void 0 ? void 0 : _c.altitudeSmooth) &&
895
+ activity.hasStreamData(DataAltitude.type) &&
896
+ !activity.hasStreamData(DataAltitudeSmooth.type)) {
897
+ // Duplicate and create an altitude smooth stream (we want to keep original altitude stream available)
898
+ // Activity stats will be computed on the smoothed altitude stream
899
+ this.cloneStream(activity, DataAltitude.type, DataAltitudeSmooth.type);
900
+ // Remove spiky data altitudes
901
+ this.shapeStream(DataAltitudeSmooth.type, activity, squashedAltData => {
902
+ squashedAltData = medianFilter(squashedAltData, ALTITUDE_SPIKES_FILTER_WIN); // Remove data spikes
903
+ squashedAltData = LowPassFilter.smooth(squashedAltData); // Remove too high altitude frequencies
904
+ return squashedAltData;
905
+ });
906
+ }
907
+ return activity;
908
+ }
909
+ /**
910
+ * Back and forth fills an activity's stream data so they can be more "tree" like
911
+ * It does this for:
912
+ *
913
+ * [DataAltitude.type,
914
+ * DataHeartRate.type,
915
+ * DataCadence.type,
916
+ * DataDistance.type]
917
+ *
918
+ * Example
919
+ *
920
+ * Distance[0, 10, 30, 40, 50,null,60] #null here is legit eg missing record
921
+ * Altitude[100, 101, null, 103, null, null, 106]
922
+ * Should be
923
+ * Altitude[100,101,101,103,103,103,106]
924
+ *
925
+ * @param activity
926
+ */
927
+ static addMissingDataToStreams(activity) {
928
+ /**
929
+ * This tries to align data with Strava.
930
+ * Strava fills HR alti cadence with the last value.
931
+ * For Power and temperature it doesn't but keeps nulls.
932
+ * However, if you keep nulls for paused portions then strava doens't give back null
933
+ * that typically indicates a sensor disconnect I suppose.
934
+ */
935
+ const streamTypesToBackAndForthFill = [
936
+ DataAltitude.type,
937
+ DataHeartRate.type,
938
+ DataCadence.type,
939
+ DataDistance.type
940
+ // DataSpeed.type, @todo should we be backfilling speed?
941
+ ];
942
+ // First generate the time stream
943
+ const timeStream = activity.generateTimeStream();
944
+ /**
945
+ * We do a second pass here and we add missing data on crossing time indexes
946
+ * for example:
947
+ * Time[0,1,2,3,4,5,7]
948
+ * Distance[0, 10, 30, 40, 50,null,60] #null here is legit eg missing record
949
+ * Altitude[100, 101, null, 103, null, null, 106]
950
+ * Should be
951
+ * Altitude[100,101,101,103,103,103,106]
952
+ */
953
+ activity
954
+ .getAllStreams()
955
+ .filter(stream => streamTypesToBackAndForthFill.indexOf(stream.type) !== -1)
956
+ .forEach(stream => {
957
+ // Find the first sample value
958
+ let currentValue = stream.getData(true, true)[0];
959
+ // The time stream will always have more length than each stream when not back/forthfilled
960
+ const timeStreamData = timeStream.getData();
961
+ stream.setData(timeStreamData.reduce((data, time, timeIndex) => {
962
+ // If there is no timeslot put whatever was
963
+ if (!isNumber(time)) {
964
+ data.push(stream.getData()[timeIndex]);
965
+ return data;
966
+ }
967
+ // We have a time slot here on ... (for the first run, old is the very first next)
968
+ // If it's a number set the current , else leave it to old to forth fill
969
+ if (isNumber(stream.getData()[time])) {
970
+ currentValue = stream.getData()[time];
971
+ }
972
+ // Fill the current or old...
973
+ data.push(currentValue);
974
+ return data;
975
+ }, []));
976
+ });
977
+ /**
978
+ * @todo
979
+ * Linear fill distance where:
980
+ * a) There is not distance but it's not paused
981
+ * b) There is no corespoding lat/long but there is distace (aka distance = not trusted)
982
+ * About B I am not sure. That is because if there is for example an internal accelerometer
983
+ * that reports better this can help with pace and other things. Even for GAP
984
+ */
985
+ // Fix activity having broken start lat/lng
986
+ // Case: "fixtures/others/broken-start-latlng.fit"
987
+ if (activity.hasStreamData(DataLongitudeDegrees.type)) {
988
+ this.shapeStream(DataLongitudeDegrees.type, activity, (squashedData) => {
989
+ const firstKnownCoord = squashedData.find(l => l != 0);
990
+ if (firstKnownCoord != null) {
991
+ let index = 0;
992
+ while (squashedData[index] === 0) {
993
+ squashedData[index] = firstKnownCoord;
994
+ index++;
995
+ }
996
+ }
997
+ return squashedData;
998
+ });
999
+ }
1000
+ if (activity.hasStreamData(DataLatitudeDegrees.type)) {
1001
+ this.shapeStream(DataLatitudeDegrees.type, activity, (squashedData) => {
1002
+ const firstKnownCoord = squashedData.find(l => l != 0);
1003
+ if (firstKnownCoord != null) {
1004
+ let index = 0;
1005
+ while (squashedData[index] === 0) {
1006
+ squashedData[index] = firstKnownCoord;
1007
+ index++;
1008
+ }
1009
+ }
1010
+ return squashedData;
1011
+ });
1012
+ }
1013
+ }
1014
+ /**
1015
+ *
1016
+ * @param secondsPer100m
1017
+ * @param avgStrokesPerMin
1018
+ * @param poolLength
1019
+ */
1020
+ static computeSwimSwolf(secondsPer100m, avgStrokesPerMin, poolLength) {
1021
+ const minutesPer100m = secondsPer100m / 60;
1022
+ const avgStrokePer100m = avgStrokesPerMin * minutesPer100m;
1023
+ const strokesPerMeter = avgStrokePer100m / 100;
1024
+ const secondsPerMeter = secondsPer100m / 100;
1025
+ return this.round((secondsPerMeter + strokesPerMeter) * poolLength, 1);
1026
+ }
1027
+ /**
1028
+ * Andrew Coggan weighted power compute method
1029
+ * 1) starting at the 30s mark, calculate a rolling 30 s average (of the preceding time points, obviously).
1030
+ * 2) raise all the values obtained in step #1 to the 4th power.
1031
+ * 3) take the average of all of the values obtained in step #2.
1032
+ * 4) take the 4th root of the value obtained in step #3.
1033
+ * (And when you get tired of exporting every file to, e.g., Excel to perform such calculations, help develop a program
1034
+ * like WKO+ to do the work for you <g>.)
1035
+ */
1036
+ static computeNormalizedPower(powerArray, timeArray) {
1037
+ const WEIGHTED_WATTS_TIME_BUFFER = 30; // Seconds
1038
+ const poweredWeightedWatts = [];
1039
+ let accumulatedTimeInBuffer = 0; // seconds
1040
+ let wattsInBuffer = [];
1041
+ for (const [index, current] of timeArray.entries()) {
1042
+ if (index === 0) {
1043
+ continue;
1044
+ }
1045
+ wattsInBuffer.push(powerArray[index]);
1046
+ if (accumulatedTimeInBuffer >= WEIGHTED_WATTS_TIME_BUFFER) {
1047
+ const meanWatts = this.getAverage(wattsInBuffer);
1048
+ if (Number.isFinite(meanWatts)) {
1049
+ poweredWeightedWatts.push(Math.pow(meanWatts, 4));
1050
+ }
1051
+ // Reset
1052
+ accumulatedTimeInBuffer = 0;
1053
+ wattsInBuffer = [];
1054
+ }
1055
+ accumulatedTimeInBuffer += current - timeArray[index - 1];
1056
+ }
1057
+ return Math.sqrt(Math.sqrt(this.getAverage(poweredWeightedWatts)));
1058
+ }
1059
+ static getActivityDataTypeGainOrLoss(activity, streamType, gain, startDate, endDate, minDiff) {
1060
+ return this.getGainOrLoss(activity.getSquashedStreamData(streamType, startDate, endDate), gain, minDiff);
1061
+ }
1062
+ static getActivityDataTypeMinOrMax(activity, streamType, max, startDate, endDate, filterOver) {
1063
+ const data = activity
1064
+ .getSquashedStreamData(streamType, startDate, endDate)
1065
+ .filter(streamData => streamData !== Infinity &&
1066
+ streamData !== -Infinity &&
1067
+ (Number.isFinite(filterOver) ? streamData > filterOver : true));
1068
+ if (max) {
1069
+ return this.getMax(data);
1070
+ }
1071
+ return this.getMin(data);
1072
+ }
1073
+ /**
1074
+ * Generates the stats for an activity
1075
+ * @todo move to factory with next version
1076
+ * @param activity
1077
+ */
1078
+ static generateMissingStatsForActivity(activity) {
1079
+ // If there is no distance or distance for some reason is 0
1080
+ const activityDistanceStat = activity.getStat(DataDistance.type);
1081
+ if (!activityDistanceStat || activityDistanceStat.getValue() === 0) {
1082
+ let distance = 0;
1083
+ if (activity.hasStreamData(DataDistance.type)) {
1084
+ const distanceData = activity.getSquashedStreamData(DataDistance.type);
1085
+ distance = distanceData[distanceData.length - 1] - distanceData[0] || 0;
1086
+ }
1087
+ else if (activity.hasStreamData(DataLongitudeDegrees.type) &&
1088
+ activity.hasStreamData(DataLatitudeDegrees.type)) {
1089
+ distance = this.calculateTotalDistanceForActivity(activity, activity.startDate, activity.endDate);
1090
+ }
1091
+ activity.addStat(new DataDistance(distance));
1092
+ }
1093
+ if (!activity.getStat(DataGNSSDistance.type) && activity.hasStreamData(DataGNSSDistance.type)) {
1094
+ activity.addStat(new DataGNSSDistance(activity.getSquashedStreamData(DataGNSSDistance.type)[activity.getSquashedStreamData(DataGNSSDistance.type).length - 1]));
1095
+ }
1096
+ // Ascent (altitude gain)
1097
+ if (!activity.getStat(DataAscent.type) &&
1098
+ (activity.hasStreamData(DataAltitudeSmooth.type) || activity.hasStreamData(DataAltitude.type))) {
1099
+ const gain = this.getActivityDataTypeGain(activity, activity.hasStreamData(DataAltitudeSmooth.type) ? DataAltitudeSmooth.type : DataAltitude.type);
1100
+ if (gain !== null) {
1101
+ activity.addStat(new DataAscent(gain));
1102
+ }
1103
+ }
1104
+ // Descent (altitude loss)
1105
+ if (!activity.getStat(DataDescent.type) &&
1106
+ (activity.hasStreamData(DataAltitudeSmooth.type) || activity.hasStreamData(DataAltitude.type))) {
1107
+ const loss = this.getActivityDataTypeLoss(activity, activity.hasStreamData(DataAltitudeSmooth.type) ? DataAltitudeSmooth.type : DataAltitude.type);
1108
+ if (loss !== null) {
1109
+ activity.addStat(new DataDescent(loss));
1110
+ }
1111
+ }
1112
+ // Altitude Max
1113
+ if (!activity.getStat(DataAltitudeMax.type) &&
1114
+ (activity.hasStreamData(DataAltitudeSmooth.type) || activity.hasStreamData(DataAltitude.type))) {
1115
+ activity.addStat(new DataAltitudeMax(this.getDataTypeMax(activity, activity.hasStreamData(DataAltitudeSmooth.type) ? DataAltitudeSmooth.type : DataAltitude.type)));
1116
+ }
1117
+ // Altitude Min
1118
+ if (!activity.getStat(DataAltitudeMin.type) &&
1119
+ (activity.hasStreamData(DataAltitudeSmooth.type) || activity.hasStreamData(DataAltitude.type))) {
1120
+ activity.addStat(new DataAltitudeMin(this.getDataTypeMin(activity, activity.hasStreamData(DataAltitudeSmooth.type) ? DataAltitudeSmooth.type : DataAltitude.type)));
1121
+ }
1122
+ // Altitude Avg
1123
+ if (!activity.getStat(DataAltitudeAvg.type) &&
1124
+ (activity.hasStreamData(DataAltitudeSmooth.type) || activity.hasStreamData(DataAltitude.type))) {
1125
+ activity.addStat(new DataAltitudeAvg(this.getDataTypeAvg(activity, activity.hasStreamData(DataAltitudeSmooth.type) ? DataAltitudeSmooth.type : DataAltitude.type)));
1126
+ }
1127
+ // Altitude start
1128
+ if (!activity.getStat(DataStartAltitude.type) &&
1129
+ (activity.hasStreamData(DataAltitudeSmooth.type) || activity.hasStreamData(DataAltitude.type)) &&
1130
+ this.getDataTypeFirst(activity, activity.hasStreamData(DataAltitudeSmooth.type) ? DataAltitudeSmooth.type : DataAltitude.type)) {
1131
+ activity.addStat(new DataStartAltitude(this.getDataTypeFirst(activity, activity.hasStreamData(DataAltitudeSmooth.type) ? DataAltitudeSmooth.type : DataAltitude.type)));
1132
+ }
1133
+ // Altitude end
1134
+ if (!activity.getStat(DataEndAltitude.type) &&
1135
+ (activity.hasStreamData(DataAltitudeSmooth.type) || activity.hasStreamData(DataAltitude.type)) &&
1136
+ this.getDataTypeLast(activity, activity.hasStreamData(DataAltitudeSmooth.type) ? DataAltitudeSmooth.type : DataAltitude.type)) {
1137
+ activity.addStat(new DataEndAltitude(this.getDataTypeLast(activity, activity.hasStreamData(DataAltitudeSmooth.type) ? DataAltitudeSmooth.type : DataAltitude.type)));
1138
+ }
1139
+ // Heart Rate Max
1140
+ if (!activity.getStat(DataHeartRateMax.type) && activity.hasStreamData(DataHeartRate.type)) {
1141
+ activity.addStat(new DataHeartRateMax(this.getDataTypeMax(activity, DataHeartRate.type)));
1142
+ }
1143
+ // Heart Rate Min
1144
+ if (!activity.getStat(DataHeartRateMin.type) && activity.hasStreamData(DataHeartRate.type)) {
1145
+ activity.addStat(new DataHeartRateMin(this.getDataTypeMin(activity, DataHeartRate.type)));
1146
+ }
1147
+ // Heart Rate Avg
1148
+ if (!activity.getStat(DataHeartRateAvg.type) && activity.hasStreamData(DataHeartRate.type)) {
1149
+ activity.addStat(new DataHeartRateAvg(this.round(this.getDataTypeAvg(activity, DataHeartRate.type))));
1150
+ }
1151
+ // Cadence Max
1152
+ if (!activity.getStat(DataCadenceMax.type) && activity.hasStreamData(DataCadence.type)) {
1153
+ activity.addStat(new DataCadenceMax(this.getDataTypeMax(activity, DataCadence.type)));
1154
+ }
1155
+ // Cadence Min
1156
+ if (!activity.getStat(DataCadenceMin.type) && activity.hasStreamData(DataCadence.type)) {
1157
+ // Get min cadence except 0. A 0 cadence is not meaningful.
1158
+ const minCadenceOver = 0;
1159
+ activity.addStat(new DataCadenceMin(this.getDataTypeMin(activity, DataCadence.type, undefined, undefined, minCadenceOver)));
1160
+ }
1161
+ // Cadence Avg
1162
+ if (!activity.getStat(DataCadenceAvg.type) && activity.hasStreamData(DataCadence.type)) {
1163
+ // Get avg cadence except 0 values. Platforms like garmin/strava don't include 0 cadences in their averages.
1164
+ const avgCadenceOver = 0;
1165
+ const avgCadence = this.getDataTypeAvg(activity, DataCadence.type, undefined, undefined, avgCadenceOver);
1166
+ activity.addStat(new DataCadenceAvg(this.round(avgCadence)));
1167
+ }
1168
+ // Speed Max
1169
+ if (!activity.getStat(DataSpeedMax.type) && activity.hasStreamData(DataSpeed.type)) {
1170
+ activity.addStat(new DataSpeedMax(this.getDataTypeMax(activity, DataSpeed.type)));
1171
+ }
1172
+ // Speed Min
1173
+ if (!activity.getStat(DataSpeedMin.type) && activity.hasStreamData(DataSpeed.type)) {
1174
+ activity.addStat(new DataSpeedMin(this.getDataTypeMin(activity, DataSpeed.type)));
1175
+ }
1176
+ // Speed Avg
1177
+ if (!activity.getStat(DataSpeedAvg.type) && activity.hasStreamData(DataSpeed.type)) {
1178
+ activity.addStat(new DataSpeedAvg(this.getDataTypeAvg(activity, DataSpeed.type)));
1179
+ }
1180
+ // Grade Adjusted Speed Max
1181
+ if (!activity.getStat(DataGradeAdjustedSpeedMax.type) && activity.hasStreamData(DataGradeAdjustedSpeed.type)) {
1182
+ activity.addStat(new DataGradeAdjustedSpeedMax(this.getDataTypeMax(activity, DataGradeAdjustedSpeed.type)));
1183
+ }
1184
+ // Grade Adjusted Speed Min
1185
+ if (!activity.getStat(DataGradeAdjustedSpeedMin.type) && activity.hasStreamData(DataGradeAdjustedSpeed.type)) {
1186
+ activity.addStat(new DataGradeAdjustedSpeedMin(this.getDataTypeMin(activity, DataGradeAdjustedSpeed.type)));
1187
+ }
1188
+ // Grade Adjusted Speed Avg
1189
+ if (!activity.getStat(DataGradeAdjustedSpeedAvg.type) && activity.hasStreamData(DataGradeAdjustedSpeed.type)) {
1190
+ activity.addStat(new DataGradeAdjustedSpeedAvg(this.getDataTypeAvg(activity, DataGradeAdjustedSpeed.type)));
1191
+ }
1192
+ // Vertical Speed Max
1193
+ if (!activity.getStat(DataVerticalSpeedMax.type) && activity.hasStreamData(DataVerticalSpeed.type)) {
1194
+ activity.addStat(new DataVerticalSpeedMax(this.getDataTypeMax(activity, DataVerticalSpeed.type)));
1195
+ }
1196
+ // Vertical Speed Min
1197
+ if (!activity.getStat(DataVerticalSpeedMin.type) && activity.hasStreamData(DataVerticalSpeed.type)) {
1198
+ activity.addStat(new DataVerticalSpeedMin(this.getDataTypeMin(activity, DataVerticalSpeed.type)));
1199
+ }
1200
+ // Vertical Speed Avg
1201
+ if (!activity.getStat(DataVerticalSpeedAvg.type) && activity.hasStreamData(DataVerticalSpeed.type)) {
1202
+ activity.addStat(new DataVerticalSpeedAvg(this.getDataTypeAvg(activity, DataVerticalSpeed.type)));
1203
+ }
1204
+ // Power Max
1205
+ if (!activity.getStat(DataPowerMax.type) && activity.hasStreamData(DataPower.type)) {
1206
+ activity.addStat(new DataPowerMax(this.getDataTypeMax(activity, DataPower.type)));
1207
+ }
1208
+ // Power Min
1209
+ if (!activity.getStat(DataPowerMin.type) && activity.hasStreamData(DataPower.type)) {
1210
+ activity.addStat(new DataPowerMin(this.getDataTypeMin(activity, DataPower.type)));
1211
+ }
1212
+ // Power AVG
1213
+ if (!activity.getStat(DataPowerAvg.type) && activity.hasStreamData(DataPower.type)) {
1214
+ activity.addStat(new DataPowerAvg(this.getDataTypeAvg(activity, DataPower.type)));
1215
+ }
1216
+ // Power Normalized
1217
+ if (!activity.getStat(DataPowerNormalized.type) && activity.hasStreamData(DataPower.type)) {
1218
+ const powerDurationStream = activity.getStreamDataByDuration(DataPower.type, true, true);
1219
+ const timeStream = powerDurationStream.map(item => item.time / 1000);
1220
+ const powerStream = powerDurationStream.map(item => item.value);
1221
+ const normalizedPower = this.computeNormalizedPower(powerStream, timeStream);
1222
+ activity.addStat(new DataPowerNormalized(normalizedPower));
1223
+ }
1224
+ // Air AirPower Max
1225
+ if (!activity.getStat(DataAirPowerMax.type) && activity.hasStreamData(DataAirPower.type)) {
1226
+ activity.addStat(new DataAirPowerMax(this.getDataTypeMax(activity, DataAirPower.type)));
1227
+ }
1228
+ // Air AirPower Min
1229
+ if (!activity.getStat(DataAirPowerMin.type) && activity.hasStreamData(DataAirPower.type)) {
1230
+ activity.addStat(new DataAirPowerMin(this.getDataTypeMin(activity, DataAirPower.type)));
1231
+ }
1232
+ // Air AirPower AVG
1233
+ if (!activity.getStat(DataAirPowerAvg.type) && activity.hasStreamData(DataAirPower.type)) {
1234
+ activity.addStat(new DataAirPowerAvg(this.getDataTypeAvg(activity, DataAirPower.type)));
1235
+ }
1236
+ // Temperature Max
1237
+ if (!activity.getStat(DataTemperatureMax.type) && activity.hasStreamData(DataTemperature.type)) {
1238
+ activity.addStat(new DataTemperatureMax(this.getDataTypeMax(activity, DataTemperature.type)));
1239
+ }
1240
+ // Temperature Min
1241
+ if (!activity.getStat(DataTemperatureMin.type) && activity.hasStreamData(DataTemperature.type)) {
1242
+ activity.addStat(new DataTemperatureMin(this.getDataTypeMin(activity, DataTemperature.type)));
1243
+ }
1244
+ // Temperature Avg
1245
+ if (!activity.getStat(DataTemperatureAvg.type) && activity.hasStreamData(DataTemperature.type)) {
1246
+ activity.addStat(new DataTemperatureAvg(this.getDataTypeAvg(activity, DataTemperature.type)));
1247
+ }
1248
+ // Battery Consumption Avg
1249
+ if (!activity.getStat(DataBatteryConsumption.type) && activity.hasStreamData(DataBatteryCharge.type)) {
1250
+ activity.addStat(new DataBatteryConsumption(this.getDataTypeMinToMaxDifference(activity, DataBatteryCharge.type)));
1251
+ }
1252
+ // Battery Life Estimation based on Consumption
1253
+ if (!activity.getStat(DataBatteryLifeEstimation.type)) {
1254
+ const consumption = activity.getStat(DataBatteryConsumption.type);
1255
+ if (consumption && consumption.getValue()) {
1256
+ activity.addStat(new DataBatteryLifeEstimation(Number(((+activity.endDate - +activity.startDate) / 1000) * 100) / Number(consumption.getValue())));
1257
+ }
1258
+ }
1259
+ // Start and end position
1260
+ if ((!activity.getStat(DataStartPosition.type) || !activity.getStat(DataEndPosition.type)) &&
1261
+ activity.hasPositionData()) {
1262
+ const activityPositionData = activity.getPositionData().filter(data => data !== null);
1263
+ const startPosition = activityPositionData[0];
1264
+ const endPosition = activityPositionData[activityPositionData.length - 1];
1265
+ if (startPosition && !activity.getStat(DataStartPosition.type)) {
1266
+ activity.addStat(new DataStartPosition(startPosition));
1267
+ }
1268
+ if (endPosition && !activity.getStat(DataEndPosition.type)) {
1269
+ activity.addStat(new DataEndPosition(endPosition));
1270
+ }
1271
+ }
1272
+ // Assign L/R balance from streams if exists
1273
+ if (!activity.getStat(DataRightBalance.type) && activity.hasStreamData(DataRightBalance.type)) {
1274
+ const avgRightBalance = this.round(this.getDataTypeAvg(activity, DataRightBalance.type), 2);
1275
+ activity.addStat(new DataRightBalance(avgRightBalance));
1276
+ activity.addStat(new DataLeftBalance(100 - avgRightBalance));
1277
+ }
1278
+ // Assign L/R balance stance time from streams if exists
1279
+ if (!activity.getStat(DataStanceTimeBalanceLeft.type) && activity.hasStreamData(DataStanceTimeBalanceLeft.type)) {
1280
+ const avgStanceTimeLeftBalance = this.round(this.getDataTypeAvg(activity, DataStanceTimeBalanceLeft.type), 2);
1281
+ activity.addStat(new DataStanceTimeBalanceLeft(avgStanceTimeLeftBalance));
1282
+ activity.addStat(new DataStanceTimeBalanceRight(100 - avgStanceTimeLeftBalance));
1283
+ }
1284
+ }
1285
+ static generateMissingSpeedDerivedStatsForActivity(activity) {
1286
+ // Pace
1287
+ const speedMax = activity.getStat(DataSpeedMax.type);
1288
+ if (speedMax && !activity.getStat(DataPaceMax.type)) {
1289
+ activity.addStat(new DataPaceMax(convertSpeedToPace(speedMax.getValue())));
1290
+ }
1291
+ const speedMin = activity.getStat(DataSpeedMin.type);
1292
+ if (speedMin && !activity.getStat(DataPaceMin.type)) {
1293
+ activity.addStat(new DataPaceMin(convertSpeedToPace(speedMin.getValue())));
1294
+ }
1295
+ const speedAvg = activity.getStat(DataSpeedAvg.type);
1296
+ if (speedAvg && !activity.getStat(DataPaceAvg.type)) {
1297
+ activity.addStat(new DataPaceAvg(convertSpeedToPace(speedAvg.getValue())));
1298
+ }
1299
+ // GAP
1300
+ const gradeAdjustedSpeedMax = activity.getStat(DataGradeAdjustedSpeedMax.type);
1301
+ if (gradeAdjustedSpeedMax && !activity.getStat(DataGradeAdjustedPaceMax.type)) {
1302
+ const targetAdjustedSpeed = gradeAdjustedSpeedMax.getValue() < speedMax.getValue()
1303
+ ? speedMax.getValue()
1304
+ : gradeAdjustedSpeedMax.getValue();
1305
+ activity.addStat(new DataGradeAdjustedPaceMax(convertSpeedToPace(targetAdjustedSpeed)));
1306
+ }
1307
+ const gradeAdjustedSpeedMin = activity.getStat(DataGradeAdjustedSpeedMin.type);
1308
+ if (gradeAdjustedSpeedMin && !activity.getStat(DataGradeAdjustedPaceMin.type)) {
1309
+ const targetAdjustedSpeed = gradeAdjustedSpeedMin.getValue() < speedMin.getValue()
1310
+ ? speedMin.getValue()
1311
+ : gradeAdjustedSpeedMin.getValue();
1312
+ activity.addStat(new DataGradeAdjustedPaceMin(convertSpeedToPace(targetAdjustedSpeed)));
1313
+ }
1314
+ const gradeAdjustedSpeedAvg = activity.getStat(DataGradeAdjustedSpeedAvg.type);
1315
+ if (gradeAdjustedSpeedAvg && !activity.getStat(DataGradeAdjustedPaceAvg.type)) {
1316
+ const targetAdjustedSpeed = gradeAdjustedSpeedAvg.getValue() < speedAvg.getValue()
1317
+ ? speedAvg.getValue()
1318
+ : gradeAdjustedSpeedAvg.getValue();
1319
+ activity.addStat(new DataGradeAdjustedPaceAvg(convertSpeedToPace(targetAdjustedSpeed)));
1320
+ }
1321
+ // Swim Pace
1322
+ if (speedMax && !activity.getStat(DataSwimPaceMax.type)) {
1323
+ activity.addStat(new DataSwimPaceMax(convertSpeedToSwimPace(speedMax.getValue())));
1324
+ }
1325
+ if (speedMin && !activity.getStat(DataSwimPaceMin.type)) {
1326
+ activity.addStat(new DataSwimPaceMin(convertSpeedToSwimPace(speedMin.getValue())));
1327
+ }
1328
+ if (speedAvg && !activity.getStat(DataSwimPaceAvg.type)) {
1329
+ activity.addStat(new DataSwimPaceAvg(convertSpeedToSwimPace(speedAvg.getValue())));
1330
+ }
1331
+ }
1332
+ // @todo move to factory
1333
+ static generateMissingUnitStatsForActivity(activity) {
1334
+ var _a, _b, _c;
1335
+ // Pace
1336
+ if (!activity.getStat(DataPaceMaxMinutesPerMile.type)) {
1337
+ const paceMax = activity.getStat(DataPaceMax.type);
1338
+ if (paceMax) {
1339
+ activity.addStat(new DataPaceMaxMinutesPerMile(convertPaceToPaceInMinutesPerMile(paceMax.getValue())));
1340
+ }
1341
+ }
1342
+ if (!activity.getStat(DataPaceMinMinutesPerMile.type)) {
1343
+ const paceMin = activity.getStat(DataPaceMin.type);
1344
+ if (paceMin) {
1345
+ activity.addStat(new DataPaceMinMinutesPerMile(convertPaceToPaceInMinutesPerMile(paceMin.getValue())));
1346
+ }
1347
+ }
1348
+ if (!activity.getStat(DataPaceAvgMinutesPerMile.type)) {
1349
+ const paceAvg = activity.getStat(DataPaceAvg.type);
1350
+ if (paceAvg) {
1351
+ activity.addStat(new DataPaceAvgMinutesPerMile(convertPaceToPaceInMinutesPerMile(paceAvg.getValue())));
1352
+ }
1353
+ }
1354
+ // Grade Adjusted Pace
1355
+ if (!activity.getStat(DataGradeAdjustedPaceMaxMinutesPerMile.type)) {
1356
+ const gradeAdjustedPaceMax = activity.getStat(DataGradeAdjustedPaceMax.type);
1357
+ if (gradeAdjustedPaceMax) {
1358
+ activity.addStat(new DataGradeAdjustedPaceMaxMinutesPerMile(convertPaceToPaceInMinutesPerMile(gradeAdjustedPaceMax.getValue())));
1359
+ }
1360
+ }
1361
+ if (!activity.getStat(DataGradeAdjustedPaceMinMinutesPerMile.type)) {
1362
+ const gradeAdjustedPaceMin = activity.getStat(DataGradeAdjustedPaceMin.type);
1363
+ if (gradeAdjustedPaceMin) {
1364
+ activity.addStat(new DataGradeAdjustedPaceMinMinutesPerMile(convertPaceToPaceInMinutesPerMile(gradeAdjustedPaceMin.getValue())));
1365
+ }
1366
+ }
1367
+ if (!activity.getStat(DataGradeAdjustedPaceAvgMinutesPerMile.type)) {
1368
+ const gradeAdjustedPaceAvg = activity.getStat(DataGradeAdjustedPaceAvg.type);
1369
+ if (gradeAdjustedPaceAvg) {
1370
+ activity.addStat(new DataGradeAdjustedPaceAvgMinutesPerMile(convertPaceToPaceInMinutesPerMile(gradeAdjustedPaceAvg.getValue())));
1371
+ }
1372
+ }
1373
+ // Swim Pace
1374
+ if (!activity.getStat(DataSwimPaceMaxMinutesPer100Yard.type)) {
1375
+ const swimPaceMax = activity.getStat(DataSwimPaceMax.type);
1376
+ if (swimPaceMax) {
1377
+ activity.addStat(new DataSwimPaceMaxMinutesPer100Yard(convertSwimPaceToSwimPacePer100Yard(swimPaceMax.getValue())));
1378
+ }
1379
+ }
1380
+ if (!activity.getStat(DataSwimPaceMinMinutesPer100Yard.type)) {
1381
+ const swimPaceMin = activity.getStat(DataSwimPaceMin.type);
1382
+ if (swimPaceMin) {
1383
+ activity.addStat(new DataSwimPaceMinMinutesPer100Yard(convertSwimPaceToSwimPacePer100Yard(swimPaceMin.getValue())));
1384
+ }
1385
+ }
1386
+ if (!activity.getStat(DataSwimPaceAvgMinutesPer100Yard.type)) {
1387
+ const swimPaceAvg = activity.getStat(DataPaceAvg.type);
1388
+ if (swimPaceAvg) {
1389
+ activity.addStat(new DataSwimPaceAvgMinutesPer100Yard(convertSwimPaceToSwimPacePer100Yard(swimPaceAvg.getValue())));
1390
+ }
1391
+ }
1392
+ // Speed
1393
+ if (!activity.getStat(DataSpeedMaxKilometersPerHour.type)) {
1394
+ const speedMax = activity.getStat(DataSpeedMax.type);
1395
+ if (speedMax) {
1396
+ activity.addStat(new DataSpeedMaxKilometersPerHour(convertSpeedToSpeedInKilometersPerHour(speedMax.getValue())));
1397
+ }
1398
+ }
1399
+ if (!activity.getStat(DataSpeedMaxMilesPerHour.type)) {
1400
+ const speedMax = activity.getStat(DataSpeedMax.type);
1401
+ if (speedMax) {
1402
+ activity.addStat(new DataSpeedMaxMilesPerHour(convertSpeedToSpeedInMilesPerHour(speedMax.getValue())));
1403
+ }
1404
+ }
1405
+ if (!activity.getStat(DataSpeedMaxFeetPerSecond.type)) {
1406
+ const speedMax = activity.getStat(DataSpeedMax.type);
1407
+ if (speedMax) {
1408
+ activity.addStat(new DataSpeedMaxFeetPerSecond(convertSpeedToSpeedInFeetPerSecond(speedMax.getValue())));
1409
+ }
1410
+ }
1411
+ if (!activity.getStat(DataSpeedMaxFeetPerMinute.type)) {
1412
+ const speedMax = activity.getStat(DataSpeedMax.type);
1413
+ if (speedMax) {
1414
+ activity.addStat(new DataSpeedMaxFeetPerMinute(convertSpeedToSpeedInFeetPerMinute(speedMax.getValue())));
1415
+ }
1416
+ }
1417
+ if (!activity.getStat(DataSpeedMaxMetersPerMinute.type)) {
1418
+ const speedMax = activity.getStat(DataSpeedMax.type);
1419
+ if (speedMax) {
1420
+ activity.addStat(new DataSpeedMaxMetersPerMinute(convertSpeedToSpeedInMetersPerMinute(speedMax.getValue())));
1421
+ }
1422
+ }
1423
+ if (!activity.getStat(DataSpeedMaxKnots.type)) {
1424
+ const speedMax = activity.getStat(DataSpeedMax.type);
1425
+ if (speedMax) {
1426
+ activity.addStat(new DataSpeedMaxKnots(convertSpeedToSpeedInKnots(speedMax.getValue())));
1427
+ }
1428
+ }
1429
+ if (!activity.getStat(DataSpeedMinKilometersPerHour.type)) {
1430
+ const speedMin = activity.getStat(DataSpeedMin.type);
1431
+ if (speedMin) {
1432
+ activity.addStat(new DataSpeedMinKilometersPerHour(convertSpeedToSpeedInKilometersPerHour(speedMin.getValue())));
1433
+ }
1434
+ }
1435
+ if (!activity.getStat(DataSpeedMinMilesPerHour.type)) {
1436
+ const speedMin = activity.getStat(DataSpeedMin.type);
1437
+ if (speedMin) {
1438
+ activity.addStat(new DataSpeedMinMilesPerHour(convertSpeedToSpeedInMilesPerHour(speedMin.getValue())));
1439
+ }
1440
+ }
1441
+ if (!activity.getStat(DataSpeedMinFeetPerSecond.type)) {
1442
+ const speedMin = activity.getStat(DataSpeedMin.type);
1443
+ if (speedMin) {
1444
+ activity.addStat(new DataSpeedMinFeetPerSecond(convertSpeedToSpeedInFeetPerSecond(speedMin.getValue())));
1445
+ }
1446
+ }
1447
+ if (!activity.getStat(DataSpeedMinFeetPerMinute.type)) {
1448
+ const speedMin = activity.getStat(DataSpeedMin.type);
1449
+ if (speedMin) {
1450
+ activity.addStat(new DataSpeedMinFeetPerMinute(convertSpeedToSpeedInFeetPerMinute(speedMin.getValue())));
1451
+ }
1452
+ }
1453
+ if (!activity.getStat(DataSpeedMinMetersPerMinute.type)) {
1454
+ const speedMin = activity.getStat(DataSpeedMin.type);
1455
+ if (speedMin) {
1456
+ activity.addStat(new DataSpeedMinMetersPerMinute(convertSpeedToSpeedInMetersPerMinute(speedMin.getValue())));
1457
+ }
1458
+ }
1459
+ if (!activity.getStat(DataSpeedMinKnots.type)) {
1460
+ const speedMin = activity.getStat(DataSpeedMin.type);
1461
+ if (speedMin) {
1462
+ activity.addStat(new DataSpeedMinKnots(convertSpeedToSpeedInKnots(speedMin.getValue())));
1463
+ }
1464
+ }
1465
+ if (!activity.getStat(DataSpeedAvgKilometersPerHour.type)) {
1466
+ const speedAvg = activity.getStat(DataSpeedAvg.type);
1467
+ if (speedAvg) {
1468
+ activity.addStat(new DataSpeedAvgKilometersPerHour(convertSpeedToSpeedInKilometersPerHour(speedAvg.getValue())));
1469
+ }
1470
+ }
1471
+ if (!activity.getStat(DataSpeedAvgMilesPerHour.type)) {
1472
+ const speedAvg = activity.getStat(DataSpeedAvg.type);
1473
+ if (speedAvg) {
1474
+ activity.addStat(new DataSpeedAvgMilesPerHour(convertSpeedToSpeedInMilesPerHour(speedAvg.getValue())));
1475
+ }
1476
+ }
1477
+ if (!activity.getStat(DataSpeedAvgFeetPerSecond.type)) {
1478
+ const speedAvg = activity.getStat(DataSpeedAvg.type);
1479
+ if (speedAvg) {
1480
+ activity.addStat(new DataSpeedAvgFeetPerSecond(convertSpeedToSpeedInFeetPerSecond(speedAvg.getValue())));
1481
+ }
1482
+ }
1483
+ if (!activity.getStat(DataSpeedAvgFeetPerMinute.type)) {
1484
+ const speedAvg = activity.getStat(DataSpeedAvg.type);
1485
+ if (speedAvg) {
1486
+ activity.addStat(new DataSpeedAvgFeetPerMinute(convertSpeedToSpeedInFeetPerMinute(speedAvg.getValue())));
1487
+ }
1488
+ }
1489
+ if (!activity.getStat(DataSpeedAvgMetersPerMinute.type)) {
1490
+ const speedAvg = activity.getStat(DataSpeedAvg.type);
1491
+ if (speedAvg) {
1492
+ activity.addStat(new DataSpeedAvgMetersPerMinute(convertSpeedToSpeedInMetersPerMinute(speedAvg.getValue())));
1493
+ }
1494
+ }
1495
+ if (!activity.getStat(DataSpeedAvgKnots.type)) {
1496
+ const speedAvg = activity.getStat(DataSpeedAvg.type);
1497
+ if (speedAvg) {
1498
+ activity.addStat(new DataSpeedAvgKnots(convertSpeedToSpeedInKnots(speedAvg.getValue())));
1499
+ }
1500
+ }
1501
+ // Grade Adjusted Speed
1502
+ if (!activity.getStat(DataGradeAdjustedSpeedMaxKilometersPerHour.type)) {
1503
+ const speedMax = activity.getStat(DataGradeAdjustedSpeedMax.type);
1504
+ if (speedMax) {
1505
+ activity.addStat(new DataGradeAdjustedSpeedMaxKilometersPerHour(convertSpeedToSpeedInKilometersPerHour(speedMax.getValue())));
1506
+ }
1507
+ }
1508
+ if (!activity.getStat(DataGradeAdjustedSpeedMaxMilesPerHour.type)) {
1509
+ const speedMax = activity.getStat(DataGradeAdjustedSpeedMax.type);
1510
+ if (speedMax) {
1511
+ activity.addStat(new DataGradeAdjustedSpeedMaxMilesPerHour(convertSpeedToSpeedInMilesPerHour(speedMax.getValue())));
1512
+ }
1513
+ }
1514
+ if (!activity.getStat(DataGradeAdjustedSpeedMaxFeetPerSecond.type)) {
1515
+ const speedMax = activity.getStat(DataGradeAdjustedSpeedMax.type);
1516
+ if (speedMax) {
1517
+ activity.addStat(new DataGradeAdjustedSpeedMaxFeetPerSecond(convertSpeedToSpeedInFeetPerSecond(speedMax.getValue())));
1518
+ }
1519
+ }
1520
+ if (!activity.getStat(DataGradeAdjustedSpeedMaxFeetPerMinute.type)) {
1521
+ const speedMax = activity.getStat(DataGradeAdjustedSpeedMax.type);
1522
+ if (speedMax) {
1523
+ activity.addStat(new DataGradeAdjustedSpeedMaxFeetPerMinute(convertSpeedToSpeedInFeetPerMinute(speedMax.getValue())));
1524
+ }
1525
+ }
1526
+ if (!activity.getStat(DataGradeAdjustedSpeedMaxMetersPerMinute.type)) {
1527
+ const speedMax = activity.getStat(DataGradeAdjustedSpeedMax.type);
1528
+ if (speedMax) {
1529
+ activity.addStat(new DataGradeAdjustedSpeedMaxMetersPerMinute(convertSpeedToSpeedInMetersPerMinute(speedMax.getValue())));
1530
+ }
1531
+ }
1532
+ if (!activity.getStat(DataGradeAdjustedSpeedMaxKnots.type)) {
1533
+ const speedMax = activity.getStat(DataGradeAdjustedSpeedMax.type);
1534
+ if (speedMax) {
1535
+ activity.addStat(new DataGradeAdjustedSpeedMaxKnots(convertSpeedToSpeedInKnots(speedMax.getValue())));
1536
+ }
1537
+ }
1538
+ if (!activity.getStat(DataGradeAdjustedSpeedMinKilometersPerHour.type)) {
1539
+ const speedMin = activity.getStat(DataGradeAdjustedSpeedMin.type);
1540
+ if (speedMin) {
1541
+ activity.addStat(new DataGradeAdjustedSpeedMinKilometersPerHour(convertSpeedToSpeedInKilometersPerHour(speedMin.getValue())));
1542
+ }
1543
+ }
1544
+ if (!activity.getStat(DataGradeAdjustedSpeedMinMilesPerHour.type)) {
1545
+ const speedMin = activity.getStat(DataGradeAdjustedSpeedMin.type);
1546
+ if (speedMin) {
1547
+ activity.addStat(new DataGradeAdjustedSpeedMinMilesPerHour(convertSpeedToSpeedInMilesPerHour(speedMin.getValue())));
1548
+ }
1549
+ }
1550
+ if (!activity.getStat(DataGradeAdjustedSpeedMinFeetPerSecond.type)) {
1551
+ const speedMin = activity.getStat(DataGradeAdjustedSpeedMin.type);
1552
+ if (speedMin) {
1553
+ activity.addStat(new DataGradeAdjustedSpeedMinFeetPerSecond(convertSpeedToSpeedInFeetPerSecond(speedMin.getValue())));
1554
+ }
1555
+ }
1556
+ if (!activity.getStat(DataGradeAdjustedSpeedMinFeetPerMinute.type)) {
1557
+ const speedMin = activity.getStat(DataGradeAdjustedSpeedMin.type);
1558
+ if (speedMin) {
1559
+ activity.addStat(new DataGradeAdjustedSpeedMinFeetPerMinute(convertSpeedToSpeedInFeetPerMinute(speedMin.getValue())));
1560
+ }
1561
+ }
1562
+ if (!activity.getStat(DataGradeAdjustedSpeedMinMetersPerMinute.type)) {
1563
+ const speedMin = activity.getStat(DataGradeAdjustedSpeedMin.type);
1564
+ if (speedMin) {
1565
+ activity.addStat(new DataGradeAdjustedSpeedMinMetersPerMinute(convertSpeedToSpeedInMetersPerMinute(speedMin.getValue())));
1566
+ }
1567
+ }
1568
+ if (!activity.getStat(DataGradeAdjustedSpeedMinKnots.type)) {
1569
+ const speedMin = activity.getStat(DataGradeAdjustedSpeedMin.type);
1570
+ if (speedMin) {
1571
+ activity.addStat(new DataGradeAdjustedSpeedMinKnots(convertSpeedToSpeedInKnots(speedMin.getValue())));
1572
+ }
1573
+ }
1574
+ if (!activity.getStat(DataGradeAdjustedSpeedAvgKilometersPerHour.type)) {
1575
+ const speedAvg = activity.getStat(DataGradeAdjustedSpeedAvg.type);
1576
+ if (speedAvg) {
1577
+ activity.addStat(new DataGradeAdjustedSpeedAvgKilometersPerHour(convertSpeedToSpeedInKilometersPerHour(speedAvg.getValue())));
1578
+ }
1579
+ }
1580
+ if (!activity.getStat(DataGradeAdjustedSpeedAvgMilesPerHour.type)) {
1581
+ const speedAvg = activity.getStat(DataGradeAdjustedSpeedAvg.type);
1582
+ if (speedAvg) {
1583
+ activity.addStat(new DataGradeAdjustedSpeedAvgMilesPerHour(convertSpeedToSpeedInMilesPerHour(speedAvg.getValue())));
1584
+ }
1585
+ }
1586
+ if (!activity.getStat(DataGradeAdjustedSpeedAvgFeetPerSecond.type)) {
1587
+ const speedAvg = activity.getStat(DataGradeAdjustedSpeedAvg.type);
1588
+ if (speedAvg) {
1589
+ activity.addStat(new DataGradeAdjustedSpeedAvgFeetPerSecond(convertSpeedToSpeedInFeetPerSecond(speedAvg.getValue())));
1590
+ }
1591
+ }
1592
+ if (!activity.getStat(DataGradeAdjustedSpeedAvgFeetPerMinute.type)) {
1593
+ const speedAvg = activity.getStat(DataGradeAdjustedSpeedAvg.type);
1594
+ if (speedAvg) {
1595
+ activity.addStat(new DataGradeAdjustedSpeedAvgFeetPerMinute(convertSpeedToSpeedInFeetPerMinute(speedAvg.getValue())));
1596
+ }
1597
+ }
1598
+ if (!activity.getStat(DataGradeAdjustedSpeedAvgMetersPerMinute.type)) {
1599
+ const speedAvg = activity.getStat(DataGradeAdjustedSpeedAvg.type);
1600
+ if (speedAvg) {
1601
+ activity.addStat(new DataGradeAdjustedSpeedAvgMetersPerMinute(convertSpeedToSpeedInMetersPerMinute(speedAvg.getValue())));
1602
+ }
1603
+ }
1604
+ if (!activity.getStat(DataGradeAdjustedSpeedAvgKnots.type)) {
1605
+ const speedAvg = activity.getStat(DataGradeAdjustedSpeedAvg.type);
1606
+ if (speedAvg) {
1607
+ activity.addStat(new DataGradeAdjustedSpeedAvgKnots(convertSpeedToSpeedInKnots(speedAvg.getValue())));
1608
+ }
1609
+ }
1610
+ // Vertical speed
1611
+ if (!activity.getStat(DataVerticalSpeedAvgFeetPerSecond.type)) {
1612
+ const verticalSpeedAvg = activity.getStat(DataVerticalSpeedAvg.type);
1613
+ if (verticalSpeedAvg) {
1614
+ activity.addStat(new DataVerticalSpeedAvgFeetPerSecond(convertSpeedToSpeedInFeetPerSecond(verticalSpeedAvg.getValue())));
1615
+ }
1616
+ }
1617
+ if (!activity.getStat(DataVerticalSpeedAvgMetersPerMinute.type)) {
1618
+ const verticalSpeedAvg = activity.getStat(DataVerticalSpeedAvg.type);
1619
+ if (verticalSpeedAvg) {
1620
+ activity.addStat(new DataVerticalSpeedAvgMetersPerMinute(convertSpeedToSpeedInMetersPerMinute(verticalSpeedAvg.getValue())));
1621
+ }
1622
+ }
1623
+ if (!activity.getStat(DataVerticalSpeedAvgFeetPerMinute.type)) {
1624
+ const verticalSpeedAvg = activity.getStat(DataVerticalSpeedAvg.type);
1625
+ if (verticalSpeedAvg) {
1626
+ activity.addStat(new DataVerticalSpeedAvgFeetPerMinute(convertSpeedToSpeedInFeetPerMinute(verticalSpeedAvg.getValue())));
1627
+ }
1628
+ }
1629
+ if (!activity.getStat(DataVerticalSpeedAvgMetersPerHour.type)) {
1630
+ const verticalSpeedAvg = activity.getStat(DataVerticalSpeedAvg.type);
1631
+ if (verticalSpeedAvg) {
1632
+ activity.addStat(new DataVerticalSpeedAvgMetersPerHour(convertSpeedToSpeedInMetersPerHour(verticalSpeedAvg.getValue())));
1633
+ }
1634
+ }
1635
+ if (!activity.getStat(DataVerticalSpeedAvgFeetPerHour.type)) {
1636
+ const verticalSpeedAvg = activity.getStat(DataVerticalSpeedAvg.type);
1637
+ if (verticalSpeedAvg) {
1638
+ activity.addStat(new DataVerticalSpeedAvgFeetPerHour(convertSpeedToSpeedInFeetPerHour(verticalSpeedAvg.getValue())));
1639
+ }
1640
+ }
1641
+ if (!activity.getStat(DataVerticalSpeedAvgKilometerPerHour.type)) {
1642
+ const verticalSpeedAvg = activity.getStat(DataVerticalSpeedAvg.type);
1643
+ if (verticalSpeedAvg) {
1644
+ activity.addStat(new DataVerticalSpeedAvgKilometerPerHour(convertSpeedToSpeedInKilometersPerHour(verticalSpeedAvg.getValue())));
1645
+ }
1646
+ }
1647
+ if (!activity.getStat(DataVerticalSpeedAvgMilesPerHour.type)) {
1648
+ const verticalSpeedAvg = activity.getStat(DataVerticalSpeedAvg.type);
1649
+ if (verticalSpeedAvg) {
1650
+ activity.addStat(new DataVerticalSpeedAvgMilesPerHour(convertSpeedToSpeedInMilesPerHour(verticalSpeedAvg.getValue())));
1651
+ }
1652
+ }
1653
+ if (!activity.getStat(DataVerticalSpeedMaxFeetPerSecond.type)) {
1654
+ const verticalSpeedMax = activity.getStat(DataVerticalSpeedMax.type);
1655
+ if (verticalSpeedMax) {
1656
+ activity.addStat(new DataVerticalSpeedMaxFeetPerSecond(convertSpeedToSpeedInFeetPerSecond(verticalSpeedMax.getValue())));
1657
+ }
1658
+ }
1659
+ if (!activity.getStat(DataVerticalSpeedMaxMetersPerMinute.type)) {
1660
+ const verticalSpeedMax = activity.getStat(DataVerticalSpeedMax.type);
1661
+ if (verticalSpeedMax) {
1662
+ activity.addStat(new DataVerticalSpeedMaxMetersPerMinute(convertSpeedToSpeedInMetersPerMinute(verticalSpeedMax.getValue())));
1663
+ }
1664
+ }
1665
+ if (!activity.getStat(DataVerticalSpeedMaxFeetPerMinute.type)) {
1666
+ const verticalSpeedMax = activity.getStat(DataVerticalSpeedMax.type);
1667
+ if (verticalSpeedMax) {
1668
+ activity.addStat(new DataVerticalSpeedMaxFeetPerMinute(convertSpeedToSpeedInFeetPerMinute(verticalSpeedMax.getValue())));
1669
+ }
1670
+ }
1671
+ if (!activity.getStat(DataVerticalSpeedMaxMetersPerHour.type)) {
1672
+ const verticalSpeedMax = activity.getStat(DataVerticalSpeedMax.type);
1673
+ if (verticalSpeedMax) {
1674
+ activity.addStat(new DataVerticalSpeedMaxMetersPerHour(convertSpeedToSpeedInMetersPerHour(verticalSpeedMax.getValue())));
1675
+ }
1676
+ }
1677
+ if (!activity.getStat(DataVerticalSpeedMaxFeetPerHour.type)) {
1678
+ const verticalSpeedMax = activity.getStat(DataVerticalSpeedMax.type);
1679
+ if (verticalSpeedMax) {
1680
+ activity.addStat(new DataVerticalSpeedMaxFeetPerHour(convertSpeedToSpeedInFeetPerHour(verticalSpeedMax.getValue())));
1681
+ }
1682
+ }
1683
+ if (!activity.getStat(DataVerticalSpeedMaxKilometerPerHour.type)) {
1684
+ const verticalSpeedMax = activity.getStat(DataVerticalSpeedMax.type);
1685
+ if (verticalSpeedMax) {
1686
+ activity.addStat(new DataVerticalSpeedMaxKilometerPerHour(convertSpeedToSpeedInKilometersPerHour(verticalSpeedMax.getValue())));
1687
+ }
1688
+ }
1689
+ if (!activity.getStat(DataVerticalSpeedMaxMilesPerHour.type)) {
1690
+ const verticalSpeedMax = activity.getStat(DataVerticalSpeedMax.type);
1691
+ if (verticalSpeedMax) {
1692
+ activity.addStat(new DataVerticalSpeedMaxMilesPerHour(convertSpeedToSpeedInMilesPerHour(verticalSpeedMax.getValue())));
1693
+ }
1694
+ }
1695
+ if (!activity.getStat(DataVerticalSpeedMinFeetPerSecond.type)) {
1696
+ const verticalSpeedMin = activity.getStat(DataVerticalSpeedMin.type);
1697
+ if (verticalSpeedMin) {
1698
+ activity.addStat(new DataVerticalSpeedMinFeetPerSecond(convertSpeedToSpeedInFeetPerSecond(verticalSpeedMin.getValue())));
1699
+ }
1700
+ }
1701
+ if (!activity.getStat(DataVerticalSpeedMinMetersPerMinute.type)) {
1702
+ const verticalSpeedMin = activity.getStat(DataVerticalSpeedMin.type);
1703
+ if (verticalSpeedMin) {
1704
+ activity.addStat(new DataVerticalSpeedMinMetersPerMinute(convertSpeedToSpeedInMetersPerMinute(verticalSpeedMin.getValue())));
1705
+ }
1706
+ }
1707
+ if (!activity.getStat(DataVerticalSpeedMinFeetPerMinute.type)) {
1708
+ const verticalSpeedMin = activity.getStat(DataVerticalSpeedMin.type);
1709
+ if (verticalSpeedMin) {
1710
+ activity.addStat(new DataVerticalSpeedMinFeetPerMinute(convertSpeedToSpeedInFeetPerMinute(verticalSpeedMin.getValue())));
1711
+ }
1712
+ }
1713
+ if (!activity.getStat(DataVerticalSpeedMinMetersPerHour.type)) {
1714
+ const verticalSpeedMin = activity.getStat(DataVerticalSpeedMin.type);
1715
+ if (verticalSpeedMin) {
1716
+ activity.addStat(new DataVerticalSpeedMinMetersPerHour(convertSpeedToSpeedInMetersPerHour(verticalSpeedMin.getValue())));
1717
+ }
1718
+ }
1719
+ if (!activity.getStat(DataVerticalSpeedMinFeetPerHour.type)) {
1720
+ const verticalSpeedMin = activity.getStat(DataVerticalSpeedMin.type);
1721
+ if (verticalSpeedMin) {
1722
+ activity.addStat(new DataVerticalSpeedMinFeetPerHour(convertSpeedToSpeedInFeetPerHour(verticalSpeedMin.getValue())));
1723
+ }
1724
+ }
1725
+ if (!activity.getStat(DataVerticalSpeedMinKilometerPerHour.type)) {
1726
+ const verticalSpeedMin = activity.getStat(DataVerticalSpeedMin.type);
1727
+ if (verticalSpeedMin) {
1728
+ activity.addStat(new DataVerticalSpeedMinKilometerPerHour(convertSpeedToSpeedInKilometersPerHour(verticalSpeedMin.getValue())));
1729
+ }
1730
+ }
1731
+ if (!activity.getStat(DataVerticalSpeedMinMilesPerHour.type)) {
1732
+ const verticalSpeedMin = activity.getStat(DataVerticalSpeedMin.type);
1733
+ if (verticalSpeedMin) {
1734
+ activity.addStat(new DataVerticalSpeedMinMilesPerHour(convertSpeedToSpeedInMilesPerHour(verticalSpeedMin.getValue())));
1735
+ }
1736
+ }
1737
+ // Test SWOLF existence for swimming activities
1738
+ if ((activity.type === ActivityTypes.Swimming || activity.type === ActivityTypes.OpenWaterSwimming) &&
1739
+ (!activity.getStat(DataSWOLF25m.type) || !activity.getStat(DataSWOLF50m.type)) &&
1740
+ ((_a = activity.getStat(DataSpeedAvg.type)) === null || _a === void 0 ? void 0 : _a.getValue()) &&
1741
+ ((_b = activity.getStat(DataCadenceAvg.type)) === null || _b === void 0 ? void 0 : _b.getValue())) {
1742
+ const avgPace100m = 100 / activity.getStat(DataSpeedAvg.type).getValue();
1743
+ const avgCadence = activity.getStat(DataCadenceAvg.type).getValue();
1744
+ if (!activity.getStat(DataSWOLF25m.type)) {
1745
+ const swolf25m = ActivityUtilities.computeSwimSwolf(avgPace100m, avgCadence, 25);
1746
+ activity.addStat(new DataSWOLF25m(swolf25m));
1747
+ }
1748
+ if (!activity.getStat(DataSWOLF50m.type)) {
1749
+ const swolf50m = ActivityUtilities.computeSwimSwolf(avgPace100m, avgCadence, 50);
1750
+ activity.addStat(new DataSWOLF50m(swolf50m));
1751
+ }
1752
+ }
1753
+ if (!activity.getStat(DataDuration.type)) {
1754
+ activity.addStat(new DataDuration((activity.endDate.getTime() - activity.startDate.getTime()) / 1000));
1755
+ }
1756
+ // If timer time not set, then assign elapsed time by default (e.g. GPX file dont support timer time)
1757
+ if (!activity.getStat(DataTimerTime.type)) {
1758
+ activity.addStat(new DataTimerTime(this.round(activity.getDuration().getValue(), 2)));
1759
+ }
1760
+ // If missing moving time
1761
+ // Or moving time equals duration, then try to build real moving from laps if available
1762
+ if (!activity.getStat(DataMovingTime.type)) {
1763
+ let movingTime = 0;
1764
+ // First try to compute moving time from laps
1765
+ const laps = activity.getLaps();
1766
+ if (laps && laps.length > 0) {
1767
+ activity.getLaps().forEach(lap => {
1768
+ const stat = lap.getStat(DataMovingTime.type);
1769
+ if (stat) {
1770
+ movingTime += stat.getValue();
1771
+ }
1772
+ });
1773
+ }
1774
+ // Get timer time...
1775
+ const timerTime = (_c = activity.getStat(DataTimerTime.type)) === null || _c === void 0 ? void 0 : _c.getValue();
1776
+ // ... and compare with moving time and determine if moving time is like "moving time"
1777
+ const isMovingTimeAlike = movingTime > 0 && movingTime < timerTime;
1778
+ // If moving time from laps is not valid
1779
+ if (!isMovingTimeAlike && activity.hasStreamData(DataSpeed.type)) {
1780
+ // ...then re-compute moving time but using global records.
1781
+ movingTime = 0;
1782
+ const speedByDurationStream = activity.getStreamDataByDuration(DataSpeed.type, true, true);
1783
+ const speedThreshold = ActivityTypesMoving.getSpeedThreshold(activity.type);
1784
+ speedByDurationStream.forEach((speedItem, index) => {
1785
+ var _a;
1786
+ if (speedItem.value !== null && speedItem.value > speedThreshold) {
1787
+ movingTime += (speedByDurationStream[index].time - (((_a = speedByDurationStream[index - 1]) === null || _a === void 0 ? void 0 : _a.time) || 0)) / 1000;
1788
+ }
1789
+ });
1790
+ }
1791
+ // In case moving time would be invalid, set it to timer time "at max"
1792
+ if (!movingTime || movingTime > timerTime) {
1793
+ movingTime = timerTime;
1794
+ }
1795
+ activity.addStat(new DataMovingTime(movingTime));
1796
+ }
1797
+ // Add Power Work if missing when avg power and moving time are available
1798
+ if (!activity.getStat(DataPowerWork.type) &&
1799
+ activity.getStat(DataPowerAvg.type) &&
1800
+ activity.getStat(DataMovingTime.type)) {
1801
+ const movingTime = activity.getStat(DataMovingTime.type).getValue();
1802
+ const avgPower = activity.getStat(DataPowerAvg.type).getValue();
1803
+ const powerWork = Math.round((avgPower * movingTime) / 1000);
1804
+ activity.addStat(new DataPowerWork(powerWork));
1805
+ }
1806
+ // If there is no pause defined then get it from duration and moving time (if available)
1807
+ if (!activity.getStat(DataPause.type) || !activity.getStat(DataPause.type).getValue()) {
1808
+ const movingTimeStat = activity.getStat(DataMovingTime.type);
1809
+ const pauseTime = movingTimeStat && movingTimeStat.getValue() ? activity.getDuration().getValue() - movingTimeStat.getValue() : 0;
1810
+ activity.addStat(new DataPause(this.round(pauseTime, 2)));
1811
+ }
1812
+ }
1813
+ }
1814
+ ActivityUtilities.geoLibAdapter = new GeoLibAdapter();