@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.
- package/jest.config.js +1 -1
- package/lib/cjs/activities/activity.spec.d.ts +1 -0
- package/lib/cjs/activities/activity.spec.js +350 -0
- package/lib/cjs/activities/activityt-types.spec.d.ts +1 -0
- package/lib/cjs/activities/activityt-types.spec.js +18 -0
- package/lib/cjs/creators/creator.spec.d.ts +1 -0
- package/lib/cjs/creators/creator.spec.js +27 -0
- package/lib/cjs/data/data-store.spec.d.ts +1 -0
- package/lib/cjs/data/data-store.spec.js +42 -0
- package/lib/cjs/data/data.spec.d.ts +1 -0
- package/lib/cjs/data/data.spec.js +27 -0
- package/lib/cjs/data/data.store.export.spec.d.ts +1 -0
- package/lib/cjs/data/data.store.export.spec.js +87 -0
- package/lib/cjs/data/ibi/data.ibi.spec.d.ts +1 -0
- package/lib/cjs/data/ibi/data.ibi.spec.js +68 -0
- package/lib/cjs/events/adapters/importers/fit/importer.fit.integration.spec.d.ts +1 -0
- package/lib/cjs/events/adapters/importers/fit/importer.fit.integration.spec.js +65 -0
- package/lib/cjs/events/adapters/importers/fit/importer.fit.js +935 -0
- package/lib/cjs/events/adapters/importers/fit/importer.fit.spec.d.ts +1 -0
- package/lib/cjs/events/adapters/importers/fit/importer.fit.spec.js +328 -0
- package/lib/cjs/events/adapters/importers/gpx/importer.gpx.integration.spec.d.ts +1 -0
- package/lib/cjs/events/adapters/importers/gpx/importer.gpx.integration.spec.js +65 -0
- package/lib/cjs/events/adapters/importers/gpx/importer.gpx.spec.d.ts +1 -0
- package/lib/cjs/events/adapters/importers/gpx/importer.gpx.spec.js +59 -0
- package/lib/cjs/events/adapters/importers/suunto/importer.suunto.integration.spec.d.ts +1 -0
- package/lib/cjs/events/adapters/importers/suunto/importer.suunto.integration.spec.js +65 -0
- package/lib/cjs/events/adapters/importers/tcx/importer.tcx.integration.spec.d.ts +1 -0
- package/lib/cjs/events/adapters/importers/tcx/importer.tcx.integration.spec.js +67 -0
- package/lib/cjs/events/event.spec.d.ts +1 -0
- package/lib/cjs/events/event.spec.js +53 -0
- package/lib/cjs/events/utilities/activity.utilities.spec.d.ts +1 -0
- package/lib/cjs/events/utilities/activity.utilities.spec.js +227 -0
- package/lib/cjs/events/utilities/grade-calculator/grade-calculator.spec.d.ts +1 -0
- package/lib/cjs/events/utilities/grade-calculator/grade-calculator.spec.js +95 -0
- package/lib/cjs/id/id.class.spec.d.ts +3 -0
- package/lib/cjs/id/id.class.spec.js +17 -0
- package/lib/cjs/intensity-zones/intensity-zones.spec.d.ts +1 -0
- package/lib/cjs/intensity-zones/intensity-zones.spec.js +32 -0
- package/lib/cjs/package.json +1 -0
- package/lib/cjs/specs/activities-parsing.integration.spec.d.ts +1 -0
- package/lib/cjs/specs/activities-parsing.integration.spec.js +1871 -0
- package/lib/cjs/specs/fixtures/streams/strava/rides/3171472783.json +52534 -0
- package/lib/cjs/specs/fixtures/streams/strava/rides/3171487458.json +78818 -0
- package/lib/cjs/specs/fixtures/streams/strava/rides/343080886.json +105090 -0
- package/lib/cjs/specs/fixtures/streams/strava/rides/5910143591.json +110711 -0
- package/lib/cjs/specs/fixtures/streams/strava/runs/2451375851.json +74846 -0
- package/lib/cjs/specs/fixtures/streams/strava/runs/2709634581.json +66817 -0
- package/lib/cjs/specs/fixtures/streams/strava/runs/3156040843.json +17594 -0
- package/lib/cjs/specs/fixtures/streams/strava/runs/3182900697.json +17322 -0
- package/lib/cjs/specs/fixtures/streams/strava/runs/3183465494.json +20463 -0
- package/lib/cjs/specs/fixtures/streams/strava/runs/3183490558.json +58202 -0
- package/lib/cjs/specs/spec-utils.d.ts +18 -0
- package/lib/cjs/specs/spec-utils.js +163 -0
- package/lib/cjs/specs/strava-streams-compliance.spec.d.ts +1 -0
- package/lib/cjs/specs/strava-streams-compliance.spec.js +976 -0
- package/lib/cjs/streams/stream.spec.d.ts +1 -0
- package/lib/cjs/streams/stream.spec.js +170 -0
- package/lib/esm/activities/activity-parsing-options.d.ts +18 -0
- package/lib/esm/activities/activity-parsing-options.js +13 -0
- package/lib/esm/activities/activity.d.ts +75 -0
- package/lib/esm/activities/activity.interface.d.ts +206 -0
- package/lib/esm/activities/activity.interface.js +1 -0
- package/lib/esm/activities/activity.js +273 -0
- package/lib/esm/activities/activity.json.interface.d.ts +23 -0
- package/lib/esm/activities/activity.json.interface.js +1 -0
- package/lib/esm/activities/activity.spec.d.ts +1 -0
- package/lib/esm/activities/activity.spec.js +348 -0
- package/lib/esm/activities/activity.types.d.ts +825 -0
- package/lib/esm/activities/activity.types.js +1035 -0
- package/lib/esm/activities/activityt-types.spec.d.ts +1 -0
- package/lib/esm/activities/activityt-types.spec.js +16 -0
- package/lib/esm/activities/devices/device.d.ts +21 -0
- package/lib/esm/activities/devices/device.interface.d.ts +18 -0
- package/lib/esm/activities/devices/device.interface.js +1 -0
- package/lib/esm/activities/devices/device.js +25 -0
- package/lib/esm/activities/devices/device.json.interface.d.ts +17 -0
- package/lib/esm/activities/devices/device.json.interface.js +1 -0
- package/lib/esm/constants/constants.d.ts +8 -0
- package/lib/esm/constants/constants.js +8 -0
- package/lib/esm/creators/creator.d.ts +15 -0
- package/lib/esm/creators/creator.interface.d.ts +14 -0
- package/lib/esm/creators/creator.interface.js +1 -0
- package/lib/esm/creators/creator.js +37 -0
- package/lib/esm/creators/creator.json.interface.d.ts +11 -0
- package/lib/esm/creators/creator.json.interface.js +1 -0
- package/lib/esm/creators/creator.spec.d.ts +1 -0
- package/lib/esm/creators/creator.spec.js +25 -0
- package/lib/esm/data/data-active-lap.d.ts +4 -0
- package/lib/esm/data/data-active-lap.js +4 -0
- package/lib/esm/data/data-active-lengths.d.ts +4 -0
- package/lib/esm/data/data-active-lengths.js +4 -0
- package/lib/esm/data/data-aerobic-training-effect.d.ts +6 -0
- package/lib/esm/data/data-aerobic-training-effect.js +8 -0
- package/lib/esm/data/data-anaerobic-training-effect.d.ts +6 -0
- package/lib/esm/data/data-anaerobic-training-effect.js +8 -0
- package/lib/esm/data/data-stance-time-balance-left.d.ts +4 -0
- package/lib/esm/data/data-stance-time-balance-left.js +4 -0
- package/lib/esm/data/data-stance-time-balance-right.d.ts +4 -0
- package/lib/esm/data/data-stance-time-balance-right.js +4 -0
- package/lib/esm/data/data-stance-time-balance.d.ts +3 -0
- package/lib/esm/data/data-stance-time-balance.js +3 -0
- package/lib/esm/data/data-store.spec.d.ts +1 -0
- package/lib/esm/data/data-store.spec.js +40 -0
- package/lib/esm/data/data-total-cycles.d.ts +4 -0
- package/lib/esm/data/data-total-cycles.js +4 -0
- package/lib/esm/data/data.absolute-pressure.d.ts +5 -0
- package/lib/esm/data/data.absolute-pressure.js +5 -0
- package/lib/esm/data/data.accumulated-power.d.ts +6 -0
- package/lib/esm/data/data.accumulated-power.js +8 -0
- package/lib/esm/data/data.activity-types.d.ts +5 -0
- package/lib/esm/data/data.activity-types.js +7 -0
- package/lib/esm/data/data.air-power-avg.d.ts +4 -0
- package/lib/esm/data/data.air-power-avg.js +4 -0
- package/lib/esm/data/data.air-power-max.d.ts +4 -0
- package/lib/esm/data/data.air-power-max.js +4 -0
- package/lib/esm/data/data.air-power-min.d.ts +4 -0
- package/lib/esm/data/data.air-power-min.js +4 -0
- package/lib/esm/data/data.air-power.d.ts +6 -0
- package/lib/esm/data/data.air-power.js +8 -0
- package/lib/esm/data/data.alti-baro-profile.d.ts +4 -0
- package/lib/esm/data/data.alti-baro-profile.js +4 -0
- package/lib/esm/data/data.altitude-avg.d.ts +4 -0
- package/lib/esm/data/data.altitude-avg.js +4 -0
- package/lib/esm/data/data.altitude-gps.d.ts +5 -0
- package/lib/esm/data/data.altitude-gps.js +5 -0
- package/lib/esm/data/data.altitude-max.d.ts +4 -0
- package/lib/esm/data/data.altitude-max.js +4 -0
- package/lib/esm/data/data.altitude-min.d.ts +4 -0
- package/lib/esm/data/data.altitude-min.js +4 -0
- package/lib/esm/data/data.altitude-smooth.d.ts +4 -0
- package/lib/esm/data/data.altitude-smooth.js +4 -0
- package/lib/esm/data/data.altitude.d.ts +6 -0
- package/lib/esm/data/data.altitude.js +8 -0
- package/lib/esm/data/data.array.d.ts +7 -0
- package/lib/esm/data/data.array.js +13 -0
- package/lib/esm/data/data.ascent-time.d.ts +4 -0
- package/lib/esm/data/data.ascent-time.js +4 -0
- package/lib/esm/data/data.ascent.d.ts +4 -0
- package/lib/esm/data/data.ascent.js +4 -0
- package/lib/esm/data/data.auto-lap-distance.d.ts +5 -0
- package/lib/esm/data/data.auto-lap-distance.js +5 -0
- package/lib/esm/data/data.auto-lap-duration.d.ts +4 -0
- package/lib/esm/data/data.auto-lap-duration.js +4 -0
- package/lib/esm/data/data.auto-lap-used.d.ts +5 -0
- package/lib/esm/data/data.auto-lap-used.js +7 -0
- package/lib/esm/data/data.auto-pause-used.d.ts +5 -0
- package/lib/esm/data/data.auto-pause-used.js +7 -0
- package/lib/esm/data/data.avg-stride-length.d.ts +4 -0
- package/lib/esm/data/data.avg-stride-length.js +4 -0
- package/lib/esm/data/data.balance.d.ts +4 -0
- package/lib/esm/data/data.balance.js +6 -0
- package/lib/esm/data/data.bare.d.ts +4 -0
- package/lib/esm/data/data.bare.js +4 -0
- package/lib/esm/data/data.battery-charge.d.ts +6 -0
- package/lib/esm/data/data.battery-charge.js +8 -0
- package/lib/esm/data/data.battery-consumption.d.ts +6 -0
- package/lib/esm/data/data.battery-consumption.js +8 -0
- package/lib/esm/data/data.battery-current.d.ts +6 -0
- package/lib/esm/data/data.battery-current.js +8 -0
- package/lib/esm/data/data.battery-life-estimation.d.ts +4 -0
- package/lib/esm/data/data.battery-life-estimation.js +4 -0
- package/lib/esm/data/data.battery-voltage.d.ts +6 -0
- package/lib/esm/data/data.battery-voltage.js +8 -0
- package/lib/esm/data/data.bike-pod-used.d.ts +5 -0
- package/lib/esm/data/data.bike-pod-used.js +7 -0
- package/lib/esm/data/data.boolean.d.ts +5 -0
- package/lib/esm/data/data.boolean.js +9 -0
- package/lib/esm/data/data.cadence-avg.d.ts +4 -0
- package/lib/esm/data/data.cadence-avg.js +4 -0
- package/lib/esm/data/data.cadence-max.d.ts +4 -0
- package/lib/esm/data/data.cadence-max.js +4 -0
- package/lib/esm/data/data.cadence-min.d.ts +4 -0
- package/lib/esm/data/data.cadence-min.js +4 -0
- package/lib/esm/data/data.cadence.d.ts +6 -0
- package/lib/esm/data/data.cadence.js +8 -0
- package/lib/esm/data/data.cycling-dynamics.d.ts +3 -0
- package/lib/esm/data/data.cycling-dynamics.js +3 -0
- package/lib/esm/data/data.cycling-position.d.ts +12 -0
- package/lib/esm/data/data.cycling-position.js +37 -0
- package/lib/esm/data/data.cycling-seated-time.d.ts +5 -0
- package/lib/esm/data/data.cycling-seated-time.js +5 -0
- package/lib/esm/data/data.cycling-standing-time.d.ts +5 -0
- package/lib/esm/data/data.cycling-standing-time.js +5 -0
- package/lib/esm/data/data.d.ts +21 -0
- package/lib/esm/data/data.descent-time.d.ts +4 -0
- package/lib/esm/data/data.descent-time.js +4 -0
- package/lib/esm/data/data.descent.d.ts +4 -0
- package/lib/esm/data/data.descent.js +4 -0
- package/lib/esm/data/data.description.d.ts +4 -0
- package/lib/esm/data/data.description.js +4 -0
- package/lib/esm/data/data.device-location.d.ts +4 -0
- package/lib/esm/data/data.device-location.js +4 -0
- package/lib/esm/data/data.device-names.d.ts +5 -0
- package/lib/esm/data/data.device-names.js +7 -0
- package/lib/esm/data/data.distance.d.ts +11 -0
- package/lib/esm/data/data.distance.js +15 -0
- package/lib/esm/data/data.duration.d.ts +14 -0
- package/lib/esm/data/data.duration.js +56 -0
- package/lib/esm/data/data.ehpe.d.ts +5 -0
- package/lib/esm/data/data.ehpe.js +5 -0
- package/lib/esm/data/data.enabled-navigation-systems.d.ts +4 -0
- package/lib/esm/data/data.enabled-navigation-systems.js +4 -0
- package/lib/esm/data/data.end-altitude.d.ts +4 -0
- package/lib/esm/data/data.end-altitude.js +4 -0
- package/lib/esm/data/data.end-position.d.ts +4 -0
- package/lib/esm/data/data.end-position.js +4 -0
- package/lib/esm/data/data.energy.d.ts +6 -0
- package/lib/esm/data/data.energy.js +8 -0
- package/lib/esm/data/data.epoc.d.ts +5 -0
- package/lib/esm/data/data.epoc.js +5 -0
- package/lib/esm/data/data.event.d.ts +3 -0
- package/lib/esm/data/data.event.js +3 -0
- package/lib/esm/data/data.evpe.d.ts +4 -0
- package/lib/esm/data/data.evpe.js +4 -0
- package/lib/esm/data/data.feeling.d.ts +12 -0
- package/lib/esm/data/data.feeling.js +15 -0
- package/lib/esm/data/data.foot-pod-used.d.ts +5 -0
- package/lib/esm/data/data.foot-pod-used.js +7 -0
- package/lib/esm/data/data.form-power.d.ts +4 -0
- package/lib/esm/data/data.form-power.js +4 -0
- package/lib/esm/data/data.fused-altitude.d.ts +5 -0
- package/lib/esm/data/data.fused-altitude.js +7 -0
- package/lib/esm/data/data.fused-location.d.ts +5 -0
- package/lib/esm/data/data.fused-location.js +7 -0
- package/lib/esm/data/data.gnss-distance.d.ts +4 -0
- package/lib/esm/data/data.gnss-distance.js +4 -0
- package/lib/esm/data/data.grade-adjusted-pace-avg.d.ts +10 -0
- package/lib/esm/data/data.grade-adjusted-pace-avg.js +15 -0
- package/lib/esm/data/data.grade-adjusted-pace-max.d.ts +10 -0
- package/lib/esm/data/data.grade-adjusted-pace-max.js +15 -0
- package/lib/esm/data/data.grade-adjusted-pace-min.d.ts +10 -0
- package/lib/esm/data/data.grade-adjusted-pace-min.js +15 -0
- package/lib/esm/data/data.grade-adjusted-pace.d.ts +12 -0
- package/lib/esm/data/data.grade-adjusted-pace.js +25 -0
- package/lib/esm/data/data.grade-adjusted-speed-avg.d.ts +34 -0
- package/lib/esm/data/data.grade-adjusted-speed-avg.js +46 -0
- package/lib/esm/data/data.grade-adjusted-speed-max.d.ts +34 -0
- package/lib/esm/data/data.grade-adjusted-speed-max.js +46 -0
- package/lib/esm/data/data.grade-adjusted-speed-min.d.ts +34 -0
- package/lib/esm/data/data.grade-adjusted-speed-min.js +46 -0
- package/lib/esm/data/data.grade-adjusted-speed.d.ts +41 -0
- package/lib/esm/data/data.grade-adjusted-speed.js +78 -0
- package/lib/esm/data/data.grade-smooth.d.ts +5 -0
- package/lib/esm/data/data.grade-smooth.js +7 -0
- package/lib/esm/data/data.grade.d.ts +5 -0
- package/lib/esm/data/data.grade.js +7 -0
- package/lib/esm/data/data.ground-time.d.ts +6 -0
- package/lib/esm/data/data.ground-time.js +8 -0
- package/lib/esm/data/data.heart-rate-avg.d.ts +4 -0
- package/lib/esm/data/data.heart-rate-avg.js +4 -0
- package/lib/esm/data/data.heart-rate-max.d.ts +4 -0
- package/lib/esm/data/data.heart-rate-max.js +4 -0
- package/lib/esm/data/data.heart-rate-min.d.ts +4 -0
- package/lib/esm/data/data.heart-rate-min.js +4 -0
- package/lib/esm/data/data.heart-rate-used.d.ts +5 -0
- package/lib/esm/data/data.heart-rate-used.js +7 -0
- package/lib/esm/data/data.heart-rate-zone-five-duration.d.ts +4 -0
- package/lib/esm/data/data.heart-rate-zone-five-duration.js +4 -0
- package/lib/esm/data/data.heart-rate-zone-four-duration.d.ts +4 -0
- package/lib/esm/data/data.heart-rate-zone-four-duration.js +4 -0
- package/lib/esm/data/data.heart-rate-zone-one-duration.d.ts +4 -0
- package/lib/esm/data/data.heart-rate-zone-one-duration.js +4 -0
- package/lib/esm/data/data.heart-rate-zone-three-duration.d.ts +4 -0
- package/lib/esm/data/data.heart-rate-zone-three-duration.js +4 -0
- package/lib/esm/data/data.heart-rate-zone-two-duration.d.ts +4 -0
- package/lib/esm/data/data.heart-rate-zone-two-duration.js +4 -0
- package/lib/esm/data/data.heart-rate.d.ts +6 -0
- package/lib/esm/data/data.heart-rate.js +8 -0
- package/lib/esm/data/data.ibi.d.ts +6 -0
- package/lib/esm/data/data.ibi.js +8 -0
- package/lib/esm/data/data.interface.d.ts +19 -0
- package/lib/esm/data/data.interface.js +5 -0
- package/lib/esm/data/data.js +62 -0
- package/lib/esm/data/data.json.interface.d.ts +4 -0
- package/lib/esm/data/data.json.interface.js +1 -0
- package/lib/esm/data/data.latitude-degrees.d.ts +5 -0
- package/lib/esm/data/data.latitude-degrees.js +5 -0
- package/lib/esm/data/data.left-balance.d.ts +4 -0
- package/lib/esm/data/data.left-balance.js +4 -0
- package/lib/esm/data/data.leg-stiffness.d.ts +11 -0
- package/lib/esm/data/data.leg-stiffness.js +16 -0
- package/lib/esm/data/data.longitude-degrees.d.ts +5 -0
- package/lib/esm/data/data.longitude-degrees.js +5 -0
- package/lib/esm/data/data.moving-time.d.ts +4 -0
- package/lib/esm/data/data.moving-time.js +4 -0
- package/lib/esm/data/data.number-of-satellites.d.ts +5 -0
- package/lib/esm/data/data.number-of-satellites.js +7 -0
- package/lib/esm/data/data.number-of.samples.d.ts +4 -0
- package/lib/esm/data/data.number-of.samples.js +4 -0
- package/lib/esm/data/data.number.d.ts +7 -0
- package/lib/esm/data/data.number.js +13 -0
- package/lib/esm/data/data.pace-avg.d.ts +8 -0
- package/lib/esm/data/data.pace-avg.js +8 -0
- package/lib/esm/data/data.pace-max.d.ts +8 -0
- package/lib/esm/data/data.pace-max.js +8 -0
- package/lib/esm/data/data.pace-min.d.ts +8 -0
- package/lib/esm/data/data.pace-min.js +8 -0
- package/lib/esm/data/data.pace.d.ts +14 -0
- package/lib/esm/data/data.pace.js +46 -0
- package/lib/esm/data/data.pause.d.ts +4 -0
- package/lib/esm/data/data.pause.js +4 -0
- package/lib/esm/data/data.peak-epoc.d.ts +5 -0
- package/lib/esm/data/data.peak-epoc.js +7 -0
- package/lib/esm/data/data.peak-training-effect.d.ts +4 -0
- package/lib/esm/data/data.peak-training-effect.js +4 -0
- package/lib/esm/data/data.percent.d.ts +4 -0
- package/lib/esm/data/data.percent.js +4 -0
- package/lib/esm/data/data.pool-length.d.ts +5 -0
- package/lib/esm/data/data.pool-length.js +5 -0
- package/lib/esm/data/data.position.d.ts +10 -0
- package/lib/esm/data/data.position.interface.d.ts +4 -0
- package/lib/esm/data/data.position.interface.js +1 -0
- package/lib/esm/data/data.position.js +18 -0
- package/lib/esm/data/data.power-avg.d.ts +4 -0
- package/lib/esm/data/data.power-avg.js +4 -0
- package/lib/esm/data/data.power-down.d.ts +4 -0
- package/lib/esm/data/data.power-down.js +4 -0
- package/lib/esm/data/data.power-intensity-factor.d.ts +5 -0
- package/lib/esm/data/data.power-intensity-factor.js +5 -0
- package/lib/esm/data/data.power-left.d.ts +4 -0
- package/lib/esm/data/data.power-left.js +4 -0
- package/lib/esm/data/data.power-max.d.ts +4 -0
- package/lib/esm/data/data.power-max.js +4 -0
- package/lib/esm/data/data.power-min.d.ts +4 -0
- package/lib/esm/data/data.power-min.js +4 -0
- package/lib/esm/data/data.power-normalized.d.ts +4 -0
- package/lib/esm/data/data.power-normalized.js +4 -0
- package/lib/esm/data/data.power-pedal-smoothness-left.d.ts +4 -0
- package/lib/esm/data/data.power-pedal-smoothness-left.js +4 -0
- package/lib/esm/data/data.power-pedal-smoothness-right.d.ts +4 -0
- package/lib/esm/data/data.power-pedal-smoothness-right.js +4 -0
- package/lib/esm/data/data.power-pod-used.d.ts +5 -0
- package/lib/esm/data/data.power-pod-used.js +7 -0
- package/lib/esm/data/data.power-right.d.ts +4 -0
- package/lib/esm/data/data.power-right.js +4 -0
- package/lib/esm/data/data.power-torque-effectiveness-left.d.ts +4 -0
- package/lib/esm/data/data.power-torque-effectiveness-left.js +4 -0
- package/lib/esm/data/data.power-torque-effectiveness-right.d.ts +4 -0
- package/lib/esm/data/data.power-torque-effectiveness-right.js +4 -0
- package/lib/esm/data/data.power-training-stress-score.d.ts +5 -0
- package/lib/esm/data/data.power-training-stress-score.js +5 -0
- package/lib/esm/data/data.power-up.d.ts +4 -0
- package/lib/esm/data/data.power-up.js +4 -0
- package/lib/esm/data/data.power-work.d.ts +5 -0
- package/lib/esm/data/data.power-work.js +5 -0
- package/lib/esm/data/data.power-zone-five-duration.d.ts +4 -0
- package/lib/esm/data/data.power-zone-five-duration.js +4 -0
- package/lib/esm/data/data.power-zone-four-duration.d.ts +4 -0
- package/lib/esm/data/data.power-zone-four-duration.js +4 -0
- package/lib/esm/data/data.power-zone-one-duration.d.ts +4 -0
- package/lib/esm/data/data.power-zone-one-duration.js +4 -0
- package/lib/esm/data/data.power-zone-three-duration.d.ts +4 -0
- package/lib/esm/data/data.power-zone-three-duration.js +4 -0
- package/lib/esm/data/data.power-zone-two-duration.d.ts +4 -0
- package/lib/esm/data/data.power-zone-two-duration.js +4 -0
- package/lib/esm/data/data.power.d.ts +6 -0
- package/lib/esm/data/data.power.js +8 -0
- package/lib/esm/data/data.recovery-time.d.ts +5 -0
- package/lib/esm/data/data.recovery-time.js +7 -0
- package/lib/esm/data/data.rider-position-change-event.d.ts +7 -0
- package/lib/esm/data/data.rider-position-change-event.js +8 -0
- package/lib/esm/data/data.right-balance.d.ts +4 -0
- package/lib/esm/data/data.right-balance.js +4 -0
- package/lib/esm/data/data.rpe.d.ts +18 -0
- package/lib/esm/data/data.rpe.js +23 -0
- package/lib/esm/data/data.satellite-5-best-snr.d.ts +4 -0
- package/lib/esm/data/data.satellite-5-best-snr.js +4 -0
- package/lib/esm/data/data.sea-level-pressure.d.ts +5 -0
- package/lib/esm/data/data.sea-level-pressure.js +5 -0
- package/lib/esm/data/data.spec.d.ts +1 -0
- package/lib/esm/data/data.spec.js +25 -0
- package/lib/esm/data/data.speed-avg.d.ts +34 -0
- package/lib/esm/data/data.speed-avg.js +46 -0
- package/lib/esm/data/data.speed-max.d.ts +34 -0
- package/lib/esm/data/data.speed-max.js +46 -0
- package/lib/esm/data/data.speed-min.d.ts +34 -0
- package/lib/esm/data/data.speed-min.js +46 -0
- package/lib/esm/data/data.speed-zone-five-duration.d.ts +4 -0
- package/lib/esm/data/data.speed-zone-five-duration.js +4 -0
- package/lib/esm/data/data.speed-zone-four-duration.d.ts +4 -0
- package/lib/esm/data/data.speed-zone-four-duration.js +4 -0
- package/lib/esm/data/data.speed-zone-one-duration.d.ts +4 -0
- package/lib/esm/data/data.speed-zone-one-duration.js +4 -0
- package/lib/esm/data/data.speed-zone-three-duration.d.ts +4 -0
- package/lib/esm/data/data.speed-zone-three-duration.js +4 -0
- package/lib/esm/data/data.speed-zone-two-duration.d.ts +4 -0
- package/lib/esm/data/data.speed-zone-two-duration.js +4 -0
- package/lib/esm/data/data.speed.d.ts +43 -0
- package/lib/esm/data/data.speed.js +88 -0
- package/lib/esm/data/data.sport-profile-name.d.ts +4 -0
- package/lib/esm/data/data.sport-profile-name.js +4 -0
- package/lib/esm/data/data.stance-time.d.ts +5 -0
- package/lib/esm/data/data.stance-time.js +5 -0
- package/lib/esm/data/data.start-altitude.d.ts +4 -0
- package/lib/esm/data/data.start-altitude.js +4 -0
- package/lib/esm/data/data.start-event.d.ts +4 -0
- package/lib/esm/data/data.start-event.js +4 -0
- package/lib/esm/data/data.start-position.d.ts +4 -0
- package/lib/esm/data/data.start-position.js +4 -0
- package/lib/esm/data/data.step-length.d.ts +4 -0
- package/lib/esm/data/data.step-length.js +4 -0
- package/lib/esm/data/data.steps-old.d.ts +4 -0
- package/lib/esm/data/data.steps-old.js +4 -0
- package/lib/esm/data/data.steps.d.ts +4 -0
- package/lib/esm/data/data.steps.js +4 -0
- package/lib/esm/data/data.stop-all-event.d.ts +4 -0
- package/lib/esm/data/data.stop-all-event.js +4 -0
- package/lib/esm/data/data.stop-event.d.ts +4 -0
- package/lib/esm/data/data.stop-event.js +4 -0
- package/lib/esm/data/data.store.d.ts +69 -0
- package/lib/esm/data/data.store.export.spec.d.ts +1 -0
- package/lib/esm/data/data.store.export.spec.js +66 -0
- package/lib/esm/data/data.store.js +1209 -0
- package/lib/esm/data/data.string.d.ts +7 -0
- package/lib/esm/data/data.string.js +13 -0
- package/lib/esm/data/data.stryd-altitude.d.ts +4 -0
- package/lib/esm/data/data.stryd-altitude.js +4 -0
- package/lib/esm/data/data.stryd-distance.d.ts +4 -0
- package/lib/esm/data/data.stryd-distance.js +4 -0
- package/lib/esm/data/data.stryd-speed.d.ts +4 -0
- package/lib/esm/data/data.stryd-speed.js +4 -0
- package/lib/esm/data/data.swim-pace-avg.d.ts +8 -0
- package/lib/esm/data/data.swim-pace-avg.js +8 -0
- package/lib/esm/data/data.swim-pace-max.d.ts +8 -0
- package/lib/esm/data/data.swim-pace-max.js +8 -0
- package/lib/esm/data/data.swim-pace-min.d.ts +8 -0
- package/lib/esm/data/data.swim-pace-min.js +8 -0
- package/lib/esm/data/data.swim-pace.d.ts +11 -0
- package/lib/esm/data/data.swim-pace.js +19 -0
- package/lib/esm/data/data.swolf-25m.d.ts +4 -0
- package/lib/esm/data/data.swolf-25m.js +4 -0
- package/lib/esm/data/data.swolf-50m.d.ts +4 -0
- package/lib/esm/data/data.swolf-50m.js +4 -0
- package/lib/esm/data/data.target-distance.d.ts +4 -0
- package/lib/esm/data/data.target-distance.js +4 -0
- package/lib/esm/data/data.target-heart-rate-zone.d.ts +4 -0
- package/lib/esm/data/data.target-heart-rate-zone.js +4 -0
- package/lib/esm/data/data.target-power-zone.d.ts +4 -0
- package/lib/esm/data/data.target-power-zone.js +4 -0
- package/lib/esm/data/data.target-speed-zone.d.ts +4 -0
- package/lib/esm/data/data.target-speed-zone.js +4 -0
- package/lib/esm/data/data.target-time.d.ts +4 -0
- package/lib/esm/data/data.target-time.js +4 -0
- package/lib/esm/data/data.temperature-avg.d.ts +4 -0
- package/lib/esm/data/data.temperature-avg.js +4 -0
- package/lib/esm/data/data.temperature-max.d.ts +4 -0
- package/lib/esm/data/data.temperature-max.js +4 -0
- package/lib/esm/data/data.temperature-min.d.ts +4 -0
- package/lib/esm/data/data.temperature-min.js +4 -0
- package/lib/esm/data/data.temperature.d.ts +6 -0
- package/lib/esm/data/data.temperature.js +8 -0
- package/lib/esm/data/data.time.d.ts +4 -0
- package/lib/esm/data/data.time.js +6 -0
- package/lib/esm/data/data.timer-time.d.ts +4 -0
- package/lib/esm/data/data.timer-time.js +4 -0
- package/lib/esm/data/data.vertical-oscillation.d.ts +5 -0
- package/lib/esm/data/data.vertical-oscillation.js +5 -0
- package/lib/esm/data/data.vertical-ratio.d.ts +5 -0
- package/lib/esm/data/data.vertical-ratio.js +5 -0
- package/lib/esm/data/data.vertical-speed-avg.d.ts +39 -0
- package/lib/esm/data/data.vertical-speed-avg.js +53 -0
- package/lib/esm/data/data.vertical-speed-max.d.ts +39 -0
- package/lib/esm/data/data.vertical-speed-max.js +53 -0
- package/lib/esm/data/data.vertical-speed-min.d.ts +39 -0
- package/lib/esm/data/data.vertical-speed-min.js +53 -0
- package/lib/esm/data/data.vertical-speed.d.ts +55 -0
- package/lib/esm/data/data.vertical-speed.js +103 -0
- package/lib/esm/data/data.vo2-max.d.ts +5 -0
- package/lib/esm/data/data.vo2-max.js +7 -0
- package/lib/esm/data/ibi/data.ibi.d.ts +56 -0
- package/lib/esm/data/ibi/data.ibi.filters.d.ts +26 -0
- package/lib/esm/data/ibi/data.ibi.filters.js +52 -0
- package/lib/esm/data/ibi/data.ibi.js +98 -0
- package/lib/esm/data/ibi/data.ibi.spec.d.ts +1 -0
- package/lib/esm/data/ibi/data.ibi.spec.js +66 -0
- package/lib/esm/duration/duration.class.abstract.d.ts +19 -0
- package/lib/esm/duration/duration.class.abstract.js +36 -0
- package/lib/esm/duration/duration.class.interface.d.ts +31 -0
- package/lib/esm/duration/duration.class.interface.js +1 -0
- package/lib/esm/errors/duration-exceeded-event-lib.error.d.ts +6 -0
- package/lib/esm/errors/duration-exceeded-event-lib.error.js +9 -0
- package/lib/esm/errors/empty-event-sports-libs.error.d.ts +6 -0
- package/lib/esm/errors/empty-event-sports-libs.error.js +9 -0
- package/lib/esm/errors/event-lib.error.d.ts +6 -0
- package/lib/esm/errors/event-lib.error.js +8 -0
- package/lib/esm/errors/lib.error.d.ts +4 -0
- package/lib/esm/errors/lib.error.js +6 -0
- package/lib/esm/errors/parsing-event-lib.error.d.ts +6 -0
- package/lib/esm/errors/parsing-event-lib.error.js +9 -0
- package/lib/esm/events/adapters/exporters/exporter.gpx.d.ts +7 -0
- package/lib/esm/events/adapters/exporters/exporter.gpx.js +75 -0
- package/lib/esm/events/adapters/exporters/exporter.interface.d.ts +6 -0
- package/lib/esm/events/adapters/exporters/exporter.interface.js +1 -0
- package/lib/esm/events/adapters/exporters/exporter.json.d.ts +11 -0
- package/lib/esm/events/adapters/exporters/exporter.json.js +20 -0
- package/lib/esm/events/adapters/file-type.enum.d.ts +6 -0
- package/lib/esm/events/adapters/file-type.enum.js +7 -0
- package/lib/esm/events/adapters/importers/fit/importer.fit.ant-plus.device.names.d.ts +3 -0
- package/lib/esm/events/adapters/importers/fit/importer.fit.ant-plus.device.names.js +25 -0
- package/lib/esm/events/adapters/importers/fit/importer.fit.coros.device.names.d.ts +3 -0
- package/lib/esm/events/adapters/importers/fit/importer.fit.coros.device.names.js +4 -0
- package/lib/esm/events/adapters/importers/fit/importer.fit.d.ts +36 -0
- package/lib/esm/events/adapters/importers/fit/importer.fit.development.device.names.d.ts +3 -0
- package/lib/esm/events/adapters/importers/fit/importer.fit.development.device.names.js +4 -0
- package/lib/esm/events/adapters/importers/fit/importer.fit.garmin.device.names.d.ts +3 -0
- package/lib/esm/events/adapters/importers/fit/importer.fit.garmin.device.names.js +403 -0
- package/lib/esm/events/adapters/importers/fit/importer.fit.hammerhead.device.names.d.ts +3 -0
- package/lib/esm/events/adapters/importers/fit/importer.fit.hammerhead.device.names.js +4 -0
- package/lib/esm/events/adapters/importers/fit/importer.fit.integration.spec.d.ts +1 -0
- package/lib/esm/events/adapters/importers/fit/importer.fit.integration.spec.js +44 -0
- package/lib/esm/events/adapters/importers/fit/importer.fit.js +928 -0
- package/lib/esm/events/adapters/importers/fit/importer.fit.lezyne.device.names.d.ts +3 -0
- package/lib/esm/events/adapters/importers/fit/importer.fit.lezyne.device.names.js +3 -0
- package/lib/esm/events/adapters/importers/fit/importer.fit.magellan.device.names.d.ts +3 -0
- package/lib/esm/events/adapters/importers/fit/importer.fit.magellan.device.names.js +5 -0
- package/lib/esm/events/adapters/importers/fit/importer.fit.mapper.d.ts +5 -0
- package/lib/esm/events/adapters/importers/fit/importer.fit.mapper.js +219 -0
- package/lib/esm/events/adapters/importers/fit/importer.fit.saris.device.names.d.ts +3 -0
- package/lib/esm/events/adapters/importers/fit/importer.fit.saris.device.names.js +3 -0
- package/lib/esm/events/adapters/importers/fit/importer.fit.spec.d.ts +1 -0
- package/lib/esm/events/adapters/importers/fit/importer.fit.spec.js +326 -0
- package/lib/esm/events/adapters/importers/fit/importer.fit.srm.device.names.d.ts +3 -0
- package/lib/esm/events/adapters/importers/fit/importer.fit.srm.device.names.js +7 -0
- package/lib/esm/events/adapters/importers/fit/importer.fit.suunto.device.names.d.ts +3 -0
- package/lib/esm/events/adapters/importers/fit/importer.fit.suunto.device.names.js +15 -0
- package/lib/esm/events/adapters/importers/fit/importer.fit.wahoo.device.names.d.ts +3 -0
- package/lib/esm/events/adapters/importers/fit/importer.fit.wahoo.device.names.js +6 -0
- package/lib/esm/events/adapters/importers/gpx/gx-parser.d.ts +4 -0
- package/lib/esm/events/adapters/importers/gpx/gx-parser.js +36 -0
- package/lib/esm/events/adapters/importers/gpx/importer.gpx.d.ts +5 -0
- package/lib/esm/events/adapters/importers/gpx/importer.gpx.integration.spec.d.ts +1 -0
- package/lib/esm/events/adapters/importers/gpx/importer.gpx.integration.spec.js +44 -0
- package/lib/esm/events/adapters/importers/gpx/importer.gpx.js +102 -0
- package/lib/esm/events/adapters/importers/gpx/importer.gpx.mapper.d.ts +5 -0
- package/lib/esm/events/adapters/importers/gpx/importer.gpx.mapper.js +142 -0
- package/lib/esm/events/adapters/importers/gpx/importer.gpx.spec.d.ts +1 -0
- package/lib/esm/events/adapters/importers/gpx/importer.gpx.spec.js +54 -0
- package/lib/esm/events/adapters/importers/json/importer.json.d.ts +26 -0
- package/lib/esm/events/adapters/importers/json/importer.json.js +157 -0
- package/lib/esm/events/adapters/importers/sample-info.interface.d.ts +3 -0
- package/lib/esm/events/adapters/importers/sample-info.interface.js +1 -0
- package/lib/esm/events/adapters/importers/suunto/importer.suunto.activity.ids.d.ts +84 -0
- package/lib/esm/events/adapters/importers/suunto/importer.suunto.activity.ids.js +85 -0
- package/lib/esm/events/adapters/importers/suunto/importer.suunto.device.names.d.ts +3 -0
- package/lib/esm/events/adapters/importers/suunto/importer.suunto.device.names.js +25 -0
- package/lib/esm/events/adapters/importers/suunto/importer.suunto.integration.spec.d.ts +1 -0
- package/lib/esm/events/adapters/importers/suunto/importer.suunto.integration.spec.js +44 -0
- package/lib/esm/events/adapters/importers/suunto/importer.suunto.json.d.ts +25 -0
- package/lib/esm/events/adapters/importers/suunto/importer.suunto.json.js +717 -0
- package/lib/esm/events/adapters/importers/suunto/importer.suunto.sml.d.ts +6 -0
- package/lib/esm/events/adapters/importers/suunto/importer.suunto.sml.js +124 -0
- package/lib/esm/events/adapters/importers/tcx/importer.tcx.d.ts +20 -0
- package/lib/esm/events/adapters/importers/tcx/importer.tcx.integration.spec.d.ts +1 -0
- package/lib/esm/events/adapters/importers/tcx/importer.tcx.integration.spec.js +46 -0
- package/lib/esm/events/adapters/importers/tcx/importer.tcx.js +442 -0
- package/lib/esm/events/adapters/importers/tcx/importer.tcx.mapper.d.ts +5 -0
- package/lib/esm/events/adapters/importers/tcx/importer.tcx.mapper.js +91 -0
- package/lib/esm/events/adapters/importers/tcx/utils.tcx.d.ts +5 -0
- package/lib/esm/events/adapters/importers/tcx/utils.tcx.js +33 -0
- package/lib/esm/events/event.d.ts +29 -0
- package/lib/esm/events/event.interface.d.ts +26 -0
- package/lib/esm/events/event.interface.js +1 -0
- package/lib/esm/events/event.js +123 -0
- package/lib/esm/events/event.json.interface.d.ts +16 -0
- package/lib/esm/events/event.json.interface.js +1 -0
- package/lib/esm/events/event.spec.d.ts +1 -0
- package/lib/esm/events/event.spec.js +51 -0
- package/lib/esm/events/utilities/activity.utilities.d.ts +140 -0
- package/lib/esm/events/utilities/activity.utilities.js +1814 -0
- package/lib/esm/events/utilities/activity.utilities.spec.d.ts +1 -0
- package/lib/esm/events/utilities/activity.utilities.spec.js +225 -0
- package/lib/esm/events/utilities/event.utilities.d.ts +6 -0
- package/lib/esm/events/utilities/event.utilities.js +57 -0
- package/lib/esm/events/utilities/grade-calculator/grade-calculator.d.ts +36 -0
- package/lib/esm/events/utilities/grade-calculator/grade-calculator.js +121 -0
- package/lib/esm/events/utilities/grade-calculator/grade-calculator.spec.d.ts +1 -0
- package/lib/esm/events/utilities/grade-calculator/grade-calculator.spec.js +93 -0
- package/lib/esm/events/utilities/grade-calculator/low-pass-filter.d.ts +38 -0
- package/lib/esm/events/utilities/grade-calculator/low-pass-filter.js +86 -0
- package/lib/esm/events/utilities/helpers.d.ts +45 -0
- package/lib/esm/events/utilities/helpers.js +162 -0
- package/lib/esm/geodesy/adapters/adapter.interface.d.ts +4 -0
- package/lib/esm/geodesy/adapters/adapter.interface.js +1 -0
- package/lib/esm/geodesy/adapters/geolib.adapter.d.ts +7 -0
- package/lib/esm/geodesy/adapters/geolib.adapter.js +28 -0
- package/lib/esm/id/id.abstract.class.d.ts +6 -0
- package/lib/esm/id/id.abstract.class.js +9 -0
- package/lib/esm/id/id.class.interface.d.ts +4 -0
- package/lib/esm/id/id.class.interface.js +1 -0
- package/lib/esm/id/id.class.spec.d.ts +3 -0
- package/lib/esm/id/id.class.spec.js +13 -0
- package/lib/esm/index.d.ts +35 -0
- package/lib/esm/index.js +47 -0
- package/lib/esm/intensity-zones/intensity-zones.d.ts +16 -0
- package/lib/esm/intensity-zones/intensity-zones.interface.d.ts +15 -0
- package/lib/esm/intensity-zones/intensity-zones.interface.js +1 -0
- package/lib/esm/intensity-zones/intensity-zones.js +29 -0
- package/lib/esm/intensity-zones/intensity-zones.json.interface.d.ts +12 -0
- package/lib/esm/intensity-zones/intensity-zones.json.interface.js +1 -0
- package/lib/esm/intensity-zones/intensity-zones.spec.d.ts +1 -0
- package/lib/esm/intensity-zones/intensity-zones.spec.js +30 -0
- package/lib/esm/laps/lap.d.ts +13 -0
- package/lib/esm/laps/lap.interface.d.ts +13 -0
- package/lib/esm/laps/lap.interface.js +1 -0
- package/lib/esm/laps/lap.js +29 -0
- package/lib/esm/laps/lap.json.interface.d.ts +10 -0
- package/lib/esm/laps/lap.json.interface.js +1 -0
- package/lib/esm/laps/lap.types.d.ts +46 -0
- package/lib/esm/laps/lap.types.js +52 -0
- package/lib/esm/meta-data/event-meta-data.interface.d.ts +31 -0
- package/lib/esm/meta-data/event-meta-data.interface.js +6 -0
- package/lib/esm/meta-data/meta-data.d.ts +30 -0
- package/lib/esm/meta-data/meta-data.js +57 -0
- package/lib/esm/meta-data/meta-data.json.interface.d.ts +21 -0
- package/lib/esm/meta-data/meta-data.json.interface.js +1 -0
- package/lib/esm/privacy/privacy.class.interface.d.ts +7 -0
- package/lib/esm/privacy/privacy.class.interface.js +5 -0
- package/lib/esm/serializable/serializable.class.interface.d.ts +3 -0
- package/lib/esm/serializable/serializable.class.interface.js +1 -0
- package/lib/esm/service-tokens/oauth1-service-token.interface.d.ts +6 -0
- package/lib/esm/service-tokens/oauth1-service-token.interface.js +1 -0
- package/lib/esm/service-tokens/oauth2-service-token.interface.d.ts +20 -0
- package/lib/esm/service-tokens/oauth2-service-token.interface.js +1 -0
- package/lib/esm/specs/activities-parsing.integration.spec.d.ts +1 -0
- package/lib/esm/specs/activities-parsing.integration.spec.js +1847 -0
- package/lib/esm/specs/fixtures/streams/strava/rides/3171472783.json +52534 -0
- package/lib/esm/specs/fixtures/streams/strava/rides/3171487458.json +78818 -0
- package/lib/esm/specs/fixtures/streams/strava/rides/343080886.json +105090 -0
- package/lib/esm/specs/fixtures/streams/strava/rides/5910143591.json +110711 -0
- package/lib/esm/specs/fixtures/streams/strava/runs/2451375851.json +74846 -0
- package/lib/esm/specs/fixtures/streams/strava/runs/2709634581.json +66817 -0
- package/lib/esm/specs/fixtures/streams/strava/runs/3156040843.json +17594 -0
- package/lib/esm/specs/fixtures/streams/strava/runs/3182900697.json +17322 -0
- package/lib/esm/specs/fixtures/streams/strava/runs/3183465494.json +20463 -0
- package/lib/esm/specs/fixtures/streams/strava/runs/3183490558.json +58202 -0
- package/lib/esm/specs/spec-utils.d.ts +18 -0
- package/lib/esm/specs/spec-utils.js +159 -0
- package/lib/esm/specs/strava-streams-compliance.spec.d.ts +1 -0
- package/lib/esm/specs/strava-streams-compliance.spec.js +951 -0
- package/lib/esm/stats/stats.class.abstract.d.ts +15 -0
- package/lib/esm/stats/stats.class.abstract.js +32 -0
- package/lib/esm/stats/stats.class.interface.d.ts +12 -0
- package/lib/esm/stats/stats.class.interface.js +1 -0
- package/lib/esm/stats/stats.json.interface.d.ts +0 -0
- package/lib/esm/stats/stats.json.interface.js +1 -0
- package/lib/esm/streams/compressed.stream.interface.d.ts +17 -0
- package/lib/esm/streams/compressed.stream.interface.js +12 -0
- package/lib/esm/streams/ibi-stream.d.ts +7 -0
- package/lib/esm/streams/ibi-stream.js +43 -0
- package/lib/esm/streams/low-pass.stream.filter.d.ts +6 -0
- package/lib/esm/streams/low-pass.stream.filter.js +9 -0
- package/lib/esm/streams/stream.d.ts +22 -0
- package/lib/esm/streams/stream.filter.interface.d.ts +3 -0
- package/lib/esm/streams/stream.filter.interface.js +1 -0
- package/lib/esm/streams/stream.interface.d.ts +73 -0
- package/lib/esm/streams/stream.interface.js +1 -0
- package/lib/esm/streams/stream.js +72 -0
- package/lib/esm/streams/stream.spec.d.ts +1 -0
- package/lib/esm/streams/stream.spec.js +168 -0
- package/lib/esm/tiles/tile.settings.interface.d.ts +59 -0
- package/lib/esm/tiles/tile.settings.interface.js +41 -0
- package/lib/esm/users/settings/dashboard/user.dashboard.settings.interface.d.ts +28 -0
- package/lib/esm/users/settings/dashboard/user.dashboard.settings.interface.js +13 -0
- package/lib/esm/users/settings/user.app.settings.interface.d.ts +7 -0
- package/lib/esm/users/settings/user.app.settings.interface.js +5 -0
- package/lib/esm/users/settings/user.chart.settings.interface.d.ts +50 -0
- package/lib/esm/users/settings/user.chart.settings.interface.js +23 -0
- package/lib/esm/users/settings/user.map.settings.interface.d.ts +30 -0
- package/lib/esm/users/settings/user.map.settings.interface.js +22 -0
- package/lib/esm/users/settings/user.my-tracks.settings.interface.d.ts +4 -0
- package/lib/esm/users/settings/user.my-tracks.settings.interface.js +1 -0
- package/lib/esm/users/settings/user.settings.interface.d.ts +20 -0
- package/lib/esm/users/settings/user.settings.interface.js +1 -0
- package/lib/esm/users/settings/user.stats-settings.interface.d.ts +6 -0
- package/lib/esm/users/settings/user.stats-settings.interface.js +1 -0
- package/lib/esm/users/settings/user.summaries.settings.interface.d.ts +4 -0
- package/lib/esm/users/settings/user.summaries.settings.interface.js +1 -0
- package/lib/esm/users/settings/user.unit.settings.interface.d.ts +63 -0
- package/lib/esm/users/settings/user.unit.settings.interface.js +73 -0
- package/lib/esm/users/user.account.privileges.interface.d.ts +4 -0
- package/lib/esm/users/user.account.privileges.interface.js +1 -0
- package/lib/esm/users/user.d.ts +34 -0
- package/lib/esm/users/user.export-to-csv.settings.interface.d.ts +3 -0
- package/lib/esm/users/user.export-to-csv.settings.interface.js +1 -0
- package/lib/esm/users/user.interface.d.ts +15 -0
- package/lib/esm/users/user.interface.js +1 -0
- package/lib/esm/users/user.js +38 -0
- package/lib/esm/users/user.service.meta.interface.d.ts +5 -0
- package/lib/esm/users/user.service.meta.interface.js +1 -0
- package/package.json +13 -5
- package/tsconfig.cjs.json +7 -0
- package/tsconfig.esm.json +8 -0
- package/lib/events/adapters/importers/fit/importer.fit.js +0 -930
- /package/lib/{activities → cjs/activities}/activity-parsing-options.d.ts +0 -0
- /package/lib/{activities → cjs/activities}/activity-parsing-options.js +0 -0
- /package/lib/{activities → cjs/activities}/activity.d.ts +0 -0
- /package/lib/{activities → cjs/activities}/activity.interface.d.ts +0 -0
- /package/lib/{activities → cjs/activities}/activity.interface.js +0 -0
- /package/lib/{activities → cjs/activities}/activity.js +0 -0
- /package/lib/{activities → cjs/activities}/activity.json.interface.d.ts +0 -0
- /package/lib/{activities → cjs/activities}/activity.json.interface.js +0 -0
- /package/lib/{activities → cjs/activities}/activity.types.d.ts +0 -0
- /package/lib/{activities → cjs/activities}/activity.types.js +0 -0
- /package/lib/{activities → cjs/activities}/devices/device.d.ts +0 -0
- /package/lib/{activities → cjs/activities}/devices/device.interface.d.ts +0 -0
- /package/lib/{activities → cjs/activities}/devices/device.interface.js +0 -0
- /package/lib/{activities → cjs/activities}/devices/device.js +0 -0
- /package/lib/{activities → cjs/activities}/devices/device.json.interface.d.ts +0 -0
- /package/lib/{activities → cjs/activities}/devices/device.json.interface.js +0 -0
- /package/lib/{constants → cjs/constants}/constants.d.ts +0 -0
- /package/lib/{constants → cjs/constants}/constants.js +0 -0
- /package/lib/{creators → cjs/creators}/creator.d.ts +0 -0
- /package/lib/{creators → cjs/creators}/creator.interface.d.ts +0 -0
- /package/lib/{creators → cjs/creators}/creator.interface.js +0 -0
- /package/lib/{creators → cjs/creators}/creator.js +0 -0
- /package/lib/{creators → cjs/creators}/creator.json.interface.d.ts +0 -0
- /package/lib/{creators → cjs/creators}/creator.json.interface.js +0 -0
- /package/lib/{data → cjs/data}/data-active-lap.d.ts +0 -0
- /package/lib/{data → cjs/data}/data-active-lap.js +0 -0
- /package/lib/{data → cjs/data}/data-active-lengths.d.ts +0 -0
- /package/lib/{data → cjs/data}/data-active-lengths.js +0 -0
- /package/lib/{data → cjs/data}/data-aerobic-training-effect.d.ts +0 -0
- /package/lib/{data → cjs/data}/data-aerobic-training-effect.js +0 -0
- /package/lib/{data → cjs/data}/data-anaerobic-training-effect.d.ts +0 -0
- /package/lib/{data → cjs/data}/data-anaerobic-training-effect.js +0 -0
- /package/lib/{data → cjs/data}/data-stance-time-balance-left.d.ts +0 -0
- /package/lib/{data → cjs/data}/data-stance-time-balance-left.js +0 -0
- /package/lib/{data → cjs/data}/data-stance-time-balance-right.d.ts +0 -0
- /package/lib/{data → cjs/data}/data-stance-time-balance-right.js +0 -0
- /package/lib/{data → cjs/data}/data-stance-time-balance.d.ts +0 -0
- /package/lib/{data → cjs/data}/data-stance-time-balance.js +0 -0
- /package/lib/{data → cjs/data}/data-total-cycles.d.ts +0 -0
- /package/lib/{data → cjs/data}/data-total-cycles.js +0 -0
- /package/lib/{data → cjs/data}/data.absolute-pressure.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.absolute-pressure.js +0 -0
- /package/lib/{data → cjs/data}/data.accumulated-power.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.accumulated-power.js +0 -0
- /package/lib/{data → cjs/data}/data.activity-types.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.activity-types.js +0 -0
- /package/lib/{data → cjs/data}/data.air-power-avg.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.air-power-avg.js +0 -0
- /package/lib/{data → cjs/data}/data.air-power-max.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.air-power-max.js +0 -0
- /package/lib/{data → cjs/data}/data.air-power-min.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.air-power-min.js +0 -0
- /package/lib/{data → cjs/data}/data.air-power.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.air-power.js +0 -0
- /package/lib/{data → cjs/data}/data.alti-baro-profile.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.alti-baro-profile.js +0 -0
- /package/lib/{data → cjs/data}/data.altitude-avg.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.altitude-avg.js +0 -0
- /package/lib/{data → cjs/data}/data.altitude-gps.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.altitude-gps.js +0 -0
- /package/lib/{data → cjs/data}/data.altitude-max.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.altitude-max.js +0 -0
- /package/lib/{data → cjs/data}/data.altitude-min.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.altitude-min.js +0 -0
- /package/lib/{data → cjs/data}/data.altitude-smooth.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.altitude-smooth.js +0 -0
- /package/lib/{data → cjs/data}/data.altitude.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.altitude.js +0 -0
- /package/lib/{data → cjs/data}/data.array.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.array.js +0 -0
- /package/lib/{data → cjs/data}/data.ascent-time.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.ascent-time.js +0 -0
- /package/lib/{data → cjs/data}/data.ascent.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.ascent.js +0 -0
- /package/lib/{data → cjs/data}/data.auto-lap-distance.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.auto-lap-distance.js +0 -0
- /package/lib/{data → cjs/data}/data.auto-lap-duration.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.auto-lap-duration.js +0 -0
- /package/lib/{data → cjs/data}/data.auto-lap-used.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.auto-lap-used.js +0 -0
- /package/lib/{data → cjs/data}/data.auto-pause-used.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.auto-pause-used.js +0 -0
- /package/lib/{data → cjs/data}/data.avg-stride-length.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.avg-stride-length.js +0 -0
- /package/lib/{data → cjs/data}/data.balance.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.balance.js +0 -0
- /package/lib/{data → cjs/data}/data.bare.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.bare.js +0 -0
- /package/lib/{data → cjs/data}/data.battery-charge.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.battery-charge.js +0 -0
- /package/lib/{data → cjs/data}/data.battery-consumption.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.battery-consumption.js +0 -0
- /package/lib/{data → cjs/data}/data.battery-current.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.battery-current.js +0 -0
- /package/lib/{data → cjs/data}/data.battery-life-estimation.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.battery-life-estimation.js +0 -0
- /package/lib/{data → cjs/data}/data.battery-voltage.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.battery-voltage.js +0 -0
- /package/lib/{data → cjs/data}/data.bike-pod-used.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.bike-pod-used.js +0 -0
- /package/lib/{data → cjs/data}/data.boolean.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.boolean.js +0 -0
- /package/lib/{data → cjs/data}/data.cadence-avg.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.cadence-avg.js +0 -0
- /package/lib/{data → cjs/data}/data.cadence-max.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.cadence-max.js +0 -0
- /package/lib/{data → cjs/data}/data.cadence-min.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.cadence-min.js +0 -0
- /package/lib/{data → cjs/data}/data.cadence.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.cadence.js +0 -0
- /package/lib/{data → cjs/data}/data.cycling-dynamics.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.cycling-dynamics.js +0 -0
- /package/lib/{data → cjs/data}/data.cycling-position.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.cycling-position.js +0 -0
- /package/lib/{data → cjs/data}/data.cycling-seated-time.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.cycling-seated-time.js +0 -0
- /package/lib/{data → cjs/data}/data.cycling-standing-time.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.cycling-standing-time.js +0 -0
- /package/lib/{data → cjs/data}/data.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.descent-time.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.descent-time.js +0 -0
- /package/lib/{data → cjs/data}/data.descent.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.descent.js +0 -0
- /package/lib/{data → cjs/data}/data.description.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.description.js +0 -0
- /package/lib/{data → cjs/data}/data.device-location.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.device-location.js +0 -0
- /package/lib/{data → cjs/data}/data.device-names.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.device-names.js +0 -0
- /package/lib/{data → cjs/data}/data.distance.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.distance.js +0 -0
- /package/lib/{data → cjs/data}/data.duration.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.duration.js +0 -0
- /package/lib/{data → cjs/data}/data.ehpe.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.ehpe.js +0 -0
- /package/lib/{data → cjs/data}/data.enabled-navigation-systems.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.enabled-navigation-systems.js +0 -0
- /package/lib/{data → cjs/data}/data.end-altitude.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.end-altitude.js +0 -0
- /package/lib/{data → cjs/data}/data.end-position.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.end-position.js +0 -0
- /package/lib/{data → cjs/data}/data.energy.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.energy.js +0 -0
- /package/lib/{data → cjs/data}/data.epoc.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.epoc.js +0 -0
- /package/lib/{data → cjs/data}/data.event.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.event.js +0 -0
- /package/lib/{data → cjs/data}/data.evpe.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.evpe.js +0 -0
- /package/lib/{data → cjs/data}/data.feeling.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.feeling.js +0 -0
- /package/lib/{data → cjs/data}/data.foot-pod-used.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.foot-pod-used.js +0 -0
- /package/lib/{data → cjs/data}/data.form-power.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.form-power.js +0 -0
- /package/lib/{data → cjs/data}/data.fused-altitude.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.fused-altitude.js +0 -0
- /package/lib/{data → cjs/data}/data.fused-location.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.fused-location.js +0 -0
- /package/lib/{data → cjs/data}/data.gnss-distance.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.gnss-distance.js +0 -0
- /package/lib/{data → cjs/data}/data.grade-adjusted-pace-avg.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.grade-adjusted-pace-avg.js +0 -0
- /package/lib/{data → cjs/data}/data.grade-adjusted-pace-max.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.grade-adjusted-pace-max.js +0 -0
- /package/lib/{data → cjs/data}/data.grade-adjusted-pace-min.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.grade-adjusted-pace-min.js +0 -0
- /package/lib/{data → cjs/data}/data.grade-adjusted-pace.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.grade-adjusted-pace.js +0 -0
- /package/lib/{data → cjs/data}/data.grade-adjusted-speed-avg.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.grade-adjusted-speed-avg.js +0 -0
- /package/lib/{data → cjs/data}/data.grade-adjusted-speed-max.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.grade-adjusted-speed-max.js +0 -0
- /package/lib/{data → cjs/data}/data.grade-adjusted-speed-min.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.grade-adjusted-speed-min.js +0 -0
- /package/lib/{data → cjs/data}/data.grade-adjusted-speed.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.grade-adjusted-speed.js +0 -0
- /package/lib/{data → cjs/data}/data.grade-smooth.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.grade-smooth.js +0 -0
- /package/lib/{data → cjs/data}/data.grade.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.grade.js +0 -0
- /package/lib/{data → cjs/data}/data.ground-time.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.ground-time.js +0 -0
- /package/lib/{data → cjs/data}/data.heart-rate-avg.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.heart-rate-avg.js +0 -0
- /package/lib/{data → cjs/data}/data.heart-rate-max.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.heart-rate-max.js +0 -0
- /package/lib/{data → cjs/data}/data.heart-rate-min.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.heart-rate-min.js +0 -0
- /package/lib/{data → cjs/data}/data.heart-rate-used.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.heart-rate-used.js +0 -0
- /package/lib/{data → cjs/data}/data.heart-rate-zone-five-duration.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.heart-rate-zone-five-duration.js +0 -0
- /package/lib/{data → cjs/data}/data.heart-rate-zone-four-duration.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.heart-rate-zone-four-duration.js +0 -0
- /package/lib/{data → cjs/data}/data.heart-rate-zone-one-duration.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.heart-rate-zone-one-duration.js +0 -0
- /package/lib/{data → cjs/data}/data.heart-rate-zone-three-duration.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.heart-rate-zone-three-duration.js +0 -0
- /package/lib/{data → cjs/data}/data.heart-rate-zone-two-duration.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.heart-rate-zone-two-duration.js +0 -0
- /package/lib/{data → cjs/data}/data.heart-rate.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.heart-rate.js +0 -0
- /package/lib/{data → cjs/data}/data.ibi.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.ibi.js +0 -0
- /package/lib/{data → cjs/data}/data.interface.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.interface.js +0 -0
- /package/lib/{data → cjs/data}/data.js +0 -0
- /package/lib/{data → cjs/data}/data.json.interface.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.json.interface.js +0 -0
- /package/lib/{data → cjs/data}/data.latitude-degrees.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.latitude-degrees.js +0 -0
- /package/lib/{data → cjs/data}/data.left-balance.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.left-balance.js +0 -0
- /package/lib/{data → cjs/data}/data.leg-stiffness.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.leg-stiffness.js +0 -0
- /package/lib/{data → cjs/data}/data.longitude-degrees.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.longitude-degrees.js +0 -0
- /package/lib/{data → cjs/data}/data.moving-time.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.moving-time.js +0 -0
- /package/lib/{data → cjs/data}/data.number-of-satellites.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.number-of-satellites.js +0 -0
- /package/lib/{data → cjs/data}/data.number-of.samples.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.number-of.samples.js +0 -0
- /package/lib/{data → cjs/data}/data.number.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.number.js +0 -0
- /package/lib/{data → cjs/data}/data.pace-avg.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.pace-avg.js +0 -0
- /package/lib/{data → cjs/data}/data.pace-max.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.pace-max.js +0 -0
- /package/lib/{data → cjs/data}/data.pace-min.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.pace-min.js +0 -0
- /package/lib/{data → cjs/data}/data.pace.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.pace.js +0 -0
- /package/lib/{data → cjs/data}/data.pause.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.pause.js +0 -0
- /package/lib/{data → cjs/data}/data.peak-epoc.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.peak-epoc.js +0 -0
- /package/lib/{data → cjs/data}/data.peak-training-effect.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.peak-training-effect.js +0 -0
- /package/lib/{data → cjs/data}/data.percent.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.percent.js +0 -0
- /package/lib/{data → cjs/data}/data.pool-length.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.pool-length.js +0 -0
- /package/lib/{data → cjs/data}/data.position.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.position.interface.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.position.interface.js +0 -0
- /package/lib/{data → cjs/data}/data.position.js +0 -0
- /package/lib/{data → cjs/data}/data.power-avg.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.power-avg.js +0 -0
- /package/lib/{data → cjs/data}/data.power-down.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.power-down.js +0 -0
- /package/lib/{data → cjs/data}/data.power-intensity-factor.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.power-intensity-factor.js +0 -0
- /package/lib/{data → cjs/data}/data.power-left.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.power-left.js +0 -0
- /package/lib/{data → cjs/data}/data.power-max.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.power-max.js +0 -0
- /package/lib/{data → cjs/data}/data.power-min.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.power-min.js +0 -0
- /package/lib/{data → cjs/data}/data.power-normalized.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.power-normalized.js +0 -0
- /package/lib/{data → cjs/data}/data.power-pedal-smoothness-left.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.power-pedal-smoothness-left.js +0 -0
- /package/lib/{data → cjs/data}/data.power-pedal-smoothness-right.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.power-pedal-smoothness-right.js +0 -0
- /package/lib/{data → cjs/data}/data.power-pod-used.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.power-pod-used.js +0 -0
- /package/lib/{data → cjs/data}/data.power-right.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.power-right.js +0 -0
- /package/lib/{data → cjs/data}/data.power-torque-effectiveness-left.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.power-torque-effectiveness-left.js +0 -0
- /package/lib/{data → cjs/data}/data.power-torque-effectiveness-right.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.power-torque-effectiveness-right.js +0 -0
- /package/lib/{data → cjs/data}/data.power-training-stress-score.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.power-training-stress-score.js +0 -0
- /package/lib/{data → cjs/data}/data.power-up.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.power-up.js +0 -0
- /package/lib/{data → cjs/data}/data.power-work.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.power-work.js +0 -0
- /package/lib/{data → cjs/data}/data.power-zone-five-duration.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.power-zone-five-duration.js +0 -0
- /package/lib/{data → cjs/data}/data.power-zone-four-duration.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.power-zone-four-duration.js +0 -0
- /package/lib/{data → cjs/data}/data.power-zone-one-duration.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.power-zone-one-duration.js +0 -0
- /package/lib/{data → cjs/data}/data.power-zone-three-duration.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.power-zone-three-duration.js +0 -0
- /package/lib/{data → cjs/data}/data.power-zone-two-duration.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.power-zone-two-duration.js +0 -0
- /package/lib/{data → cjs/data}/data.power.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.power.js +0 -0
- /package/lib/{data → cjs/data}/data.recovery-time.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.recovery-time.js +0 -0
- /package/lib/{data → cjs/data}/data.rider-position-change-event.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.rider-position-change-event.js +0 -0
- /package/lib/{data → cjs/data}/data.right-balance.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.right-balance.js +0 -0
- /package/lib/{data → cjs/data}/data.rpe.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.rpe.js +0 -0
- /package/lib/{data → cjs/data}/data.satellite-5-best-snr.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.satellite-5-best-snr.js +0 -0
- /package/lib/{data → cjs/data}/data.sea-level-pressure.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.sea-level-pressure.js +0 -0
- /package/lib/{data → cjs/data}/data.speed-avg.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.speed-avg.js +0 -0
- /package/lib/{data → cjs/data}/data.speed-max.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.speed-max.js +0 -0
- /package/lib/{data → cjs/data}/data.speed-min.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.speed-min.js +0 -0
- /package/lib/{data → cjs/data}/data.speed-zone-five-duration.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.speed-zone-five-duration.js +0 -0
- /package/lib/{data → cjs/data}/data.speed-zone-four-duration.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.speed-zone-four-duration.js +0 -0
- /package/lib/{data → cjs/data}/data.speed-zone-one-duration.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.speed-zone-one-duration.js +0 -0
- /package/lib/{data → cjs/data}/data.speed-zone-three-duration.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.speed-zone-three-duration.js +0 -0
- /package/lib/{data → cjs/data}/data.speed-zone-two-duration.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.speed-zone-two-duration.js +0 -0
- /package/lib/{data → cjs/data}/data.speed.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.speed.js +0 -0
- /package/lib/{data → cjs/data}/data.sport-profile-name.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.sport-profile-name.js +0 -0
- /package/lib/{data → cjs/data}/data.stance-time.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.stance-time.js +0 -0
- /package/lib/{data → cjs/data}/data.start-altitude.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.start-altitude.js +0 -0
- /package/lib/{data → cjs/data}/data.start-event.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.start-event.js +0 -0
- /package/lib/{data → cjs/data}/data.start-position.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.start-position.js +0 -0
- /package/lib/{data → cjs/data}/data.step-length.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.step-length.js +0 -0
- /package/lib/{data → cjs/data}/data.steps-old.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.steps-old.js +0 -0
- /package/lib/{data → cjs/data}/data.steps.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.steps.js +0 -0
- /package/lib/{data → cjs/data}/data.stop-all-event.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.stop-all-event.js +0 -0
- /package/lib/{data → cjs/data}/data.stop-event.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.stop-event.js +0 -0
- /package/lib/{data → cjs/data}/data.store.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.store.js +0 -0
- /package/lib/{data → cjs/data}/data.string.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.string.js +0 -0
- /package/lib/{data → cjs/data}/data.stryd-altitude.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.stryd-altitude.js +0 -0
- /package/lib/{data → cjs/data}/data.stryd-distance.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.stryd-distance.js +0 -0
- /package/lib/{data → cjs/data}/data.stryd-speed.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.stryd-speed.js +0 -0
- /package/lib/{data → cjs/data}/data.swim-pace-avg.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.swim-pace-avg.js +0 -0
- /package/lib/{data → cjs/data}/data.swim-pace-max.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.swim-pace-max.js +0 -0
- /package/lib/{data → cjs/data}/data.swim-pace-min.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.swim-pace-min.js +0 -0
- /package/lib/{data → cjs/data}/data.swim-pace.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.swim-pace.js +0 -0
- /package/lib/{data → cjs/data}/data.swolf-25m.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.swolf-25m.js +0 -0
- /package/lib/{data → cjs/data}/data.swolf-50m.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.swolf-50m.js +0 -0
- /package/lib/{data → cjs/data}/data.target-distance.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.target-distance.js +0 -0
- /package/lib/{data → cjs/data}/data.target-heart-rate-zone.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.target-heart-rate-zone.js +0 -0
- /package/lib/{data → cjs/data}/data.target-power-zone.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.target-power-zone.js +0 -0
- /package/lib/{data → cjs/data}/data.target-speed-zone.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.target-speed-zone.js +0 -0
- /package/lib/{data → cjs/data}/data.target-time.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.target-time.js +0 -0
- /package/lib/{data → cjs/data}/data.temperature-avg.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.temperature-avg.js +0 -0
- /package/lib/{data → cjs/data}/data.temperature-max.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.temperature-max.js +0 -0
- /package/lib/{data → cjs/data}/data.temperature-min.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.temperature-min.js +0 -0
- /package/lib/{data → cjs/data}/data.temperature.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.temperature.js +0 -0
- /package/lib/{data → cjs/data}/data.time.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.time.js +0 -0
- /package/lib/{data → cjs/data}/data.timer-time.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.timer-time.js +0 -0
- /package/lib/{data → cjs/data}/data.vertical-oscillation.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.vertical-oscillation.js +0 -0
- /package/lib/{data → cjs/data}/data.vertical-ratio.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.vertical-ratio.js +0 -0
- /package/lib/{data → cjs/data}/data.vertical-speed-avg.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.vertical-speed-avg.js +0 -0
- /package/lib/{data → cjs/data}/data.vertical-speed-max.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.vertical-speed-max.js +0 -0
- /package/lib/{data → cjs/data}/data.vertical-speed-min.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.vertical-speed-min.js +0 -0
- /package/lib/{data → cjs/data}/data.vertical-speed.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.vertical-speed.js +0 -0
- /package/lib/{data → cjs/data}/data.vo2-max.d.ts +0 -0
- /package/lib/{data → cjs/data}/data.vo2-max.js +0 -0
- /package/lib/{data → cjs/data}/ibi/data.ibi.d.ts +0 -0
- /package/lib/{data → cjs/data}/ibi/data.ibi.filters.d.ts +0 -0
- /package/lib/{data → cjs/data}/ibi/data.ibi.filters.js +0 -0
- /package/lib/{data → cjs/data}/ibi/data.ibi.js +0 -0
- /package/lib/{duration → cjs/duration}/duration.class.abstract.d.ts +0 -0
- /package/lib/{duration → cjs/duration}/duration.class.abstract.js +0 -0
- /package/lib/{duration → cjs/duration}/duration.class.interface.d.ts +0 -0
- /package/lib/{duration → cjs/duration}/duration.class.interface.js +0 -0
- /package/lib/{errors → cjs/errors}/duration-exceeded-event-lib.error.d.ts +0 -0
- /package/lib/{errors → cjs/errors}/duration-exceeded-event-lib.error.js +0 -0
- /package/lib/{errors → cjs/errors}/empty-event-sports-libs.error.d.ts +0 -0
- /package/lib/{errors → cjs/errors}/empty-event-sports-libs.error.js +0 -0
- /package/lib/{errors → cjs/errors}/event-lib.error.d.ts +0 -0
- /package/lib/{errors → cjs/errors}/event-lib.error.js +0 -0
- /package/lib/{errors → cjs/errors}/lib.error.d.ts +0 -0
- /package/lib/{errors → cjs/errors}/lib.error.js +0 -0
- /package/lib/{errors → cjs/errors}/parsing-event-lib.error.d.ts +0 -0
- /package/lib/{errors → cjs/errors}/parsing-event-lib.error.js +0 -0
- /package/lib/{events → cjs/events}/adapters/exporters/exporter.gpx.d.ts +0 -0
- /package/lib/{events → cjs/events}/adapters/exporters/exporter.gpx.js +0 -0
- /package/lib/{events → cjs/events}/adapters/exporters/exporter.interface.d.ts +0 -0
- /package/lib/{events → cjs/events}/adapters/exporters/exporter.interface.js +0 -0
- /package/lib/{events → cjs/events}/adapters/exporters/exporter.json.d.ts +0 -0
- /package/lib/{events → cjs/events}/adapters/exporters/exporter.json.js +0 -0
- /package/lib/{events → cjs/events}/adapters/file-type.enum.d.ts +0 -0
- /package/lib/{events → cjs/events}/adapters/file-type.enum.js +0 -0
- /package/lib/{events → cjs/events}/adapters/importers/fit/importer.fit.ant-plus.device.names.d.ts +0 -0
- /package/lib/{events → cjs/events}/adapters/importers/fit/importer.fit.ant-plus.device.names.js +0 -0
- /package/lib/{events → cjs/events}/adapters/importers/fit/importer.fit.coros.device.names.d.ts +0 -0
- /package/lib/{events → cjs/events}/adapters/importers/fit/importer.fit.coros.device.names.js +0 -0
- /package/lib/{events → cjs/events}/adapters/importers/fit/importer.fit.d.ts +0 -0
- /package/lib/{events → cjs/events}/adapters/importers/fit/importer.fit.development.device.names.d.ts +0 -0
- /package/lib/{events → cjs/events}/adapters/importers/fit/importer.fit.development.device.names.js +0 -0
- /package/lib/{events → cjs/events}/adapters/importers/fit/importer.fit.garmin.device.names.d.ts +0 -0
- /package/lib/{events → cjs/events}/adapters/importers/fit/importer.fit.garmin.device.names.js +0 -0
- /package/lib/{events → cjs/events}/adapters/importers/fit/importer.fit.hammerhead.device.names.d.ts +0 -0
- /package/lib/{events → cjs/events}/adapters/importers/fit/importer.fit.hammerhead.device.names.js +0 -0
- /package/lib/{events → cjs/events}/adapters/importers/fit/importer.fit.lezyne.device.names.d.ts +0 -0
- /package/lib/{events → cjs/events}/adapters/importers/fit/importer.fit.lezyne.device.names.js +0 -0
- /package/lib/{events → cjs/events}/adapters/importers/fit/importer.fit.magellan.device.names.d.ts +0 -0
- /package/lib/{events → cjs/events}/adapters/importers/fit/importer.fit.magellan.device.names.js +0 -0
- /package/lib/{events → cjs/events}/adapters/importers/fit/importer.fit.mapper.d.ts +0 -0
- /package/lib/{events → cjs/events}/adapters/importers/fit/importer.fit.mapper.js +0 -0
- /package/lib/{events → cjs/events}/adapters/importers/fit/importer.fit.saris.device.names.d.ts +0 -0
- /package/lib/{events → cjs/events}/adapters/importers/fit/importer.fit.saris.device.names.js +0 -0
- /package/lib/{events → cjs/events}/adapters/importers/fit/importer.fit.srm.device.names.d.ts +0 -0
- /package/lib/{events → cjs/events}/adapters/importers/fit/importer.fit.srm.device.names.js +0 -0
- /package/lib/{events → cjs/events}/adapters/importers/fit/importer.fit.suunto.device.names.d.ts +0 -0
- /package/lib/{events → cjs/events}/adapters/importers/fit/importer.fit.suunto.device.names.js +0 -0
- /package/lib/{events → cjs/events}/adapters/importers/fit/importer.fit.wahoo.device.names.d.ts +0 -0
- /package/lib/{events → cjs/events}/adapters/importers/fit/importer.fit.wahoo.device.names.js +0 -0
- /package/lib/{events → cjs/events}/adapters/importers/gpx/gx-parser.d.ts +0 -0
- /package/lib/{events → cjs/events}/adapters/importers/gpx/gx-parser.js +0 -0
- /package/lib/{events → cjs/events}/adapters/importers/gpx/importer.gpx.d.ts +0 -0
- /package/lib/{events → cjs/events}/adapters/importers/gpx/importer.gpx.js +0 -0
- /package/lib/{events → cjs/events}/adapters/importers/gpx/importer.gpx.mapper.d.ts +0 -0
- /package/lib/{events → cjs/events}/adapters/importers/gpx/importer.gpx.mapper.js +0 -0
- /package/lib/{events → cjs/events}/adapters/importers/json/importer.json.d.ts +0 -0
- /package/lib/{events → cjs/events}/adapters/importers/json/importer.json.js +0 -0
- /package/lib/{events → cjs/events}/adapters/importers/sample-info.interface.d.ts +0 -0
- /package/lib/{events → cjs/events}/adapters/importers/sample-info.interface.js +0 -0
- /package/lib/{events → cjs/events}/adapters/importers/suunto/importer.suunto.activity.ids.d.ts +0 -0
- /package/lib/{events → cjs/events}/adapters/importers/suunto/importer.suunto.activity.ids.js +0 -0
- /package/lib/{events → cjs/events}/adapters/importers/suunto/importer.suunto.device.names.d.ts +0 -0
- /package/lib/{events → cjs/events}/adapters/importers/suunto/importer.suunto.device.names.js +0 -0
- /package/lib/{events → cjs/events}/adapters/importers/suunto/importer.suunto.json.d.ts +0 -0
- /package/lib/{events → cjs/events}/adapters/importers/suunto/importer.suunto.json.js +0 -0
- /package/lib/{events → cjs/events}/adapters/importers/suunto/importer.suunto.sml.d.ts +0 -0
- /package/lib/{events → cjs/events}/adapters/importers/suunto/importer.suunto.sml.js +0 -0
- /package/lib/{events → cjs/events}/adapters/importers/tcx/importer.tcx.d.ts +0 -0
- /package/lib/{events → cjs/events}/adapters/importers/tcx/importer.tcx.js +0 -0
- /package/lib/{events → cjs/events}/adapters/importers/tcx/importer.tcx.mapper.d.ts +0 -0
- /package/lib/{events → cjs/events}/adapters/importers/tcx/importer.tcx.mapper.js +0 -0
- /package/lib/{events → cjs/events}/adapters/importers/tcx/utils.tcx.d.ts +0 -0
- /package/lib/{events → cjs/events}/adapters/importers/tcx/utils.tcx.js +0 -0
- /package/lib/{events → cjs/events}/event.d.ts +0 -0
- /package/lib/{events → cjs/events}/event.interface.d.ts +0 -0
- /package/lib/{events → cjs/events}/event.interface.js +0 -0
- /package/lib/{events → cjs/events}/event.js +0 -0
- /package/lib/{events → cjs/events}/event.json.interface.d.ts +0 -0
- /package/lib/{events → cjs/events}/event.json.interface.js +0 -0
- /package/lib/{events → cjs/events}/utilities/activity.utilities.d.ts +0 -0
- /package/lib/{events → cjs/events}/utilities/activity.utilities.js +0 -0
- /package/lib/{events → cjs/events}/utilities/event.utilities.d.ts +0 -0
- /package/lib/{events → cjs/events}/utilities/event.utilities.js +0 -0
- /package/lib/{events → cjs/events}/utilities/grade-calculator/grade-calculator.d.ts +0 -0
- /package/lib/{events → cjs/events}/utilities/grade-calculator/grade-calculator.js +0 -0
- /package/lib/{events → cjs/events}/utilities/grade-calculator/low-pass-filter.d.ts +0 -0
- /package/lib/{events → cjs/events}/utilities/grade-calculator/low-pass-filter.js +0 -0
- /package/lib/{events → cjs/events}/utilities/helpers.d.ts +0 -0
- /package/lib/{events → cjs/events}/utilities/helpers.js +0 -0
- /package/lib/{geodesy → cjs/geodesy}/adapters/adapter.interface.d.ts +0 -0
- /package/lib/{geodesy → cjs/geodesy}/adapters/adapter.interface.js +0 -0
- /package/lib/{geodesy → cjs/geodesy}/adapters/geolib.adapter.d.ts +0 -0
- /package/lib/{geodesy → cjs/geodesy}/adapters/geolib.adapter.js +0 -0
- /package/lib/{id → cjs/id}/id.abstract.class.d.ts +0 -0
- /package/lib/{id → cjs/id}/id.abstract.class.js +0 -0
- /package/lib/{id → cjs/id}/id.class.interface.d.ts +0 -0
- /package/lib/{id → cjs/id}/id.class.interface.js +0 -0
- /package/lib/{index.d.ts → cjs/index.d.ts} +0 -0
- /package/lib/{index.js → cjs/index.js} +0 -0
- /package/lib/{intensity-zones → cjs/intensity-zones}/intensity-zones.d.ts +0 -0
- /package/lib/{intensity-zones → cjs/intensity-zones}/intensity-zones.interface.d.ts +0 -0
- /package/lib/{intensity-zones → cjs/intensity-zones}/intensity-zones.interface.js +0 -0
- /package/lib/{intensity-zones → cjs/intensity-zones}/intensity-zones.js +0 -0
- /package/lib/{intensity-zones → cjs/intensity-zones}/intensity-zones.json.interface.d.ts +0 -0
- /package/lib/{intensity-zones → cjs/intensity-zones}/intensity-zones.json.interface.js +0 -0
- /package/lib/{laps → cjs/laps}/lap.d.ts +0 -0
- /package/lib/{laps → cjs/laps}/lap.interface.d.ts +0 -0
- /package/lib/{laps → cjs/laps}/lap.interface.js +0 -0
- /package/lib/{laps → cjs/laps}/lap.js +0 -0
- /package/lib/{laps → cjs/laps}/lap.json.interface.d.ts +0 -0
- /package/lib/{laps → cjs/laps}/lap.json.interface.js +0 -0
- /package/lib/{laps → cjs/laps}/lap.types.d.ts +0 -0
- /package/lib/{laps → cjs/laps}/lap.types.js +0 -0
- /package/lib/{meta-data → cjs/meta-data}/event-meta-data.interface.d.ts +0 -0
- /package/lib/{meta-data → cjs/meta-data}/event-meta-data.interface.js +0 -0
- /package/lib/{meta-data → cjs/meta-data}/meta-data.d.ts +0 -0
- /package/lib/{meta-data → cjs/meta-data}/meta-data.js +0 -0
- /package/lib/{meta-data → cjs/meta-data}/meta-data.json.interface.d.ts +0 -0
- /package/lib/{meta-data → cjs/meta-data}/meta-data.json.interface.js +0 -0
- /package/lib/{privacy → cjs/privacy}/privacy.class.interface.d.ts +0 -0
- /package/lib/{privacy → cjs/privacy}/privacy.class.interface.js +0 -0
- /package/lib/{serializable → cjs/serializable}/serializable.class.interface.d.ts +0 -0
- /package/lib/{serializable → cjs/serializable}/serializable.class.interface.js +0 -0
- /package/lib/{service-tokens → cjs/service-tokens}/oauth1-service-token.interface.d.ts +0 -0
- /package/lib/{service-tokens → cjs/service-tokens}/oauth1-service-token.interface.js +0 -0
- /package/lib/{service-tokens → cjs/service-tokens}/oauth2-service-token.interface.d.ts +0 -0
- /package/lib/{service-tokens → cjs/service-tokens}/oauth2-service-token.interface.js +0 -0
- /package/lib/{stats → cjs/stats}/stats.class.abstract.d.ts +0 -0
- /package/lib/{stats → cjs/stats}/stats.class.abstract.js +0 -0
- /package/lib/{stats → cjs/stats}/stats.class.interface.d.ts +0 -0
- /package/lib/{stats → cjs/stats}/stats.class.interface.js +0 -0
- /package/lib/{stats → cjs/stats}/stats.json.interface.d.ts +0 -0
- /package/lib/{stats → cjs/stats}/stats.json.interface.js +0 -0
- /package/lib/{streams → cjs/streams}/compressed.stream.interface.d.ts +0 -0
- /package/lib/{streams → cjs/streams}/compressed.stream.interface.js +0 -0
- /package/lib/{streams → cjs/streams}/ibi-stream.d.ts +0 -0
- /package/lib/{streams → cjs/streams}/ibi-stream.js +0 -0
- /package/lib/{streams → cjs/streams}/low-pass.stream.filter.d.ts +0 -0
- /package/lib/{streams → cjs/streams}/low-pass.stream.filter.js +0 -0
- /package/lib/{streams → cjs/streams}/stream.d.ts +0 -0
- /package/lib/{streams → cjs/streams}/stream.filter.interface.d.ts +0 -0
- /package/lib/{streams → cjs/streams}/stream.filter.interface.js +0 -0
- /package/lib/{streams → cjs/streams}/stream.interface.d.ts +0 -0
- /package/lib/{streams → cjs/streams}/stream.interface.js +0 -0
- /package/lib/{streams → cjs/streams}/stream.js +0 -0
- /package/lib/{tiles → cjs/tiles}/tile.settings.interface.d.ts +0 -0
- /package/lib/{tiles → cjs/tiles}/tile.settings.interface.js +0 -0
- /package/lib/{users → cjs/users}/settings/dashboard/user.dashboard.settings.interface.d.ts +0 -0
- /package/lib/{users → cjs/users}/settings/dashboard/user.dashboard.settings.interface.js +0 -0
- /package/lib/{users → cjs/users}/settings/user.app.settings.interface.d.ts +0 -0
- /package/lib/{users → cjs/users}/settings/user.app.settings.interface.js +0 -0
- /package/lib/{users → cjs/users}/settings/user.chart.settings.interface.d.ts +0 -0
- /package/lib/{users → cjs/users}/settings/user.chart.settings.interface.js +0 -0
- /package/lib/{users → cjs/users}/settings/user.map.settings.interface.d.ts +0 -0
- /package/lib/{users → cjs/users}/settings/user.map.settings.interface.js +0 -0
- /package/lib/{users → cjs/users}/settings/user.my-tracks.settings.interface.d.ts +0 -0
- /package/lib/{users → cjs/users}/settings/user.my-tracks.settings.interface.js +0 -0
- /package/lib/{users → cjs/users}/settings/user.settings.interface.d.ts +0 -0
- /package/lib/{users → cjs/users}/settings/user.settings.interface.js +0 -0
- /package/lib/{users → cjs/users}/settings/user.stats-settings.interface.d.ts +0 -0
- /package/lib/{users → cjs/users}/settings/user.stats-settings.interface.js +0 -0
- /package/lib/{users → cjs/users}/settings/user.summaries.settings.interface.d.ts +0 -0
- /package/lib/{users → cjs/users}/settings/user.summaries.settings.interface.js +0 -0
- /package/lib/{users → cjs/users}/settings/user.unit.settings.interface.d.ts +0 -0
- /package/lib/{users → cjs/users}/settings/user.unit.settings.interface.js +0 -0
- /package/lib/{users → cjs/users}/user.account.privileges.interface.d.ts +0 -0
- /package/lib/{users → cjs/users}/user.account.privileges.interface.js +0 -0
- /package/lib/{users → cjs/users}/user.d.ts +0 -0
- /package/lib/{users → cjs/users}/user.export-to-csv.settings.interface.d.ts +0 -0
- /package/lib/{users → cjs/users}/user.export-to-csv.settings.interface.js +0 -0
- /package/lib/{users → cjs/users}/user.interface.d.ts +0 -0
- /package/lib/{users → cjs/users}/user.interface.js +0 -0
- /package/lib/{users → cjs/users}/user.js +0 -0
- /package/lib/{users → cjs/users}/user.service.meta.interface.d.ts +0 -0
- /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();
|