@sports-alliance/sports-lib 7.0.8 → 7.0.9
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/lib/esm/index.js +12034 -152
- package/package.json +2 -2
- package/lib/esm/activities/activity-parsing-options.js +0 -19
- package/lib/esm/activities/activity.interface.js +0 -1
- package/lib/esm/activities/activity.js +0 -281
- package/lib/esm/activities/activity.json.interface.js +0 -1
- package/lib/esm/activities/activity.spec.js +0 -348
- package/lib/esm/activities/activity.types.js +0 -1046
- package/lib/esm/activities/activityt-types.spec.js +0 -16
- package/lib/esm/activities/devices/device.interface.js +0 -1
- package/lib/esm/activities/devices/device.js +0 -26
- package/lib/esm/activities/devices/device.json.interface.js +0 -1
- package/lib/esm/constants/constants.js +0 -8
- package/lib/esm/creators/creator.interface.js +0 -1
- package/lib/esm/creators/creator.js +0 -37
- package/lib/esm/creators/creator.json.interface.js +0 -1
- package/lib/esm/creators/creator.spec.js +0 -25
- package/lib/esm/data/data-active-lap.js +0 -4
- package/lib/esm/data/data-active-lengths.js +0 -4
- package/lib/esm/data/data-aerobic-training-effect.js +0 -8
- package/lib/esm/data/data-anaerobic-training-effect.js +0 -8
- package/lib/esm/data/data-stance-time-balance-left.js +0 -4
- package/lib/esm/data/data-stance-time-balance-right.js +0 -4
- package/lib/esm/data/data-stance-time-balance.js +0 -3
- package/lib/esm/data/data-store.spec.js +0 -78
- package/lib/esm/data/data-total-cycles.js +0 -4
- package/lib/esm/data/data.absolute-pressure.js +0 -5
- package/lib/esm/data/data.accumulated-power.js +0 -8
- package/lib/esm/data/data.activity-types.js +0 -7
- package/lib/esm/data/data.air-power-avg.js +0 -4
- package/lib/esm/data/data.air-power-max.js +0 -4
- package/lib/esm/data/data.air-power-min.js +0 -4
- package/lib/esm/data/data.air-power.js +0 -8
- package/lib/esm/data/data.alti-baro-profile.js +0 -4
- package/lib/esm/data/data.altitude-avg.js +0 -4
- package/lib/esm/data/data.altitude-gps.js +0 -5
- package/lib/esm/data/data.altitude-max.js +0 -4
- package/lib/esm/data/data.altitude-min.js +0 -4
- package/lib/esm/data/data.altitude-smooth.js +0 -4
- package/lib/esm/data/data.altitude.js +0 -8
- package/lib/esm/data/data.array.js +0 -13
- package/lib/esm/data/data.ascent-time.js +0 -4
- package/lib/esm/data/data.ascent.js +0 -4
- package/lib/esm/data/data.auto-lap-distance.js +0 -5
- package/lib/esm/data/data.auto-lap-duration.js +0 -4
- package/lib/esm/data/data.auto-lap-used.js +0 -7
- package/lib/esm/data/data.auto-pause-used.js +0 -7
- package/lib/esm/data/data.avg-stride-length.js +0 -4
- package/lib/esm/data/data.balance.js +0 -6
- package/lib/esm/data/data.bare.js +0 -4
- package/lib/esm/data/data.battery-charge.js +0 -8
- package/lib/esm/data/data.battery-consumption.js +0 -8
- package/lib/esm/data/data.battery-current.js +0 -8
- package/lib/esm/data/data.battery-life-estimation.js +0 -4
- package/lib/esm/data/data.battery-voltage.js +0 -8
- package/lib/esm/data/data.bike-pod-used.js +0 -7
- package/lib/esm/data/data.boolean.js +0 -9
- package/lib/esm/data/data.cadence-avg.js +0 -4
- package/lib/esm/data/data.cadence-max.js +0 -4
- package/lib/esm/data/data.cadence-min.js +0 -4
- package/lib/esm/data/data.cadence.js +0 -8
- package/lib/esm/data/data.cycling-dynamics.js +0 -3
- package/lib/esm/data/data.cycling-position.js +0 -37
- package/lib/esm/data/data.cycling-seated-time.js +0 -5
- package/lib/esm/data/data.cycling-standing-time.js +0 -5
- package/lib/esm/data/data.descent-time.js +0 -4
- package/lib/esm/data/data.descent.js +0 -4
- package/lib/esm/data/data.description.js +0 -4
- package/lib/esm/data/data.device-location.js +0 -4
- package/lib/esm/data/data.device-names.js +0 -7
- package/lib/esm/data/data.distance.js +0 -15
- package/lib/esm/data/data.duration.js +0 -56
- package/lib/esm/data/data.ehpe.js +0 -5
- package/lib/esm/data/data.enabled-navigation-systems.js +0 -4
- package/lib/esm/data/data.end-altitude.js +0 -4
- package/lib/esm/data/data.end-position.js +0 -4
- package/lib/esm/data/data.energy.js +0 -8
- package/lib/esm/data/data.epoc.js +0 -5
- package/lib/esm/data/data.event.js +0 -3
- package/lib/esm/data/data.evpe.js +0 -4
- package/lib/esm/data/data.feeling.js +0 -15
- package/lib/esm/data/data.foot-pod-used.js +0 -7
- package/lib/esm/data/data.form-power.js +0 -4
- package/lib/esm/data/data.fused-altitude.js +0 -7
- package/lib/esm/data/data.fused-location.js +0 -7
- package/lib/esm/data/data.gnss-distance.js +0 -4
- package/lib/esm/data/data.grade-adjusted-pace-avg.js +0 -15
- package/lib/esm/data/data.grade-adjusted-pace-max.js +0 -15
- package/lib/esm/data/data.grade-adjusted-pace-min.js +0 -15
- package/lib/esm/data/data.grade-adjusted-pace.js +0 -25
- package/lib/esm/data/data.grade-adjusted-speed-avg.js +0 -46
- package/lib/esm/data/data.grade-adjusted-speed-max.js +0 -46
- package/lib/esm/data/data.grade-adjusted-speed-min.js +0 -46
- package/lib/esm/data/data.grade-adjusted-speed.js +0 -78
- package/lib/esm/data/data.grade-smooth.js +0 -7
- package/lib/esm/data/data.grade.js +0 -7
- package/lib/esm/data/data.ground-time.js +0 -8
- package/lib/esm/data/data.heart-rate-avg.js +0 -4
- package/lib/esm/data/data.heart-rate-max.js +0 -4
- package/lib/esm/data/data.heart-rate-min.js +0 -4
- package/lib/esm/data/data.heart-rate-used.js +0 -7
- package/lib/esm/data/data.heart-rate-zone-five-duration.js +0 -4
- package/lib/esm/data/data.heart-rate-zone-four-duration.js +0 -4
- package/lib/esm/data/data.heart-rate-zone-one-duration.js +0 -4
- package/lib/esm/data/data.heart-rate-zone-three-duration.js +0 -4
- package/lib/esm/data/data.heart-rate-zone-two-duration.js +0 -4
- package/lib/esm/data/data.heart-rate.js +0 -8
- package/lib/esm/data/data.ibi.js +0 -8
- package/lib/esm/data/data.interface.js +0 -5
- package/lib/esm/data/data.js +0 -62
- package/lib/esm/data/data.json.interface.js +0 -1
- package/lib/esm/data/data.latitude-degrees.js +0 -5
- package/lib/esm/data/data.left-balance.js +0 -4
- package/lib/esm/data/data.leg-stiffness.js +0 -16
- package/lib/esm/data/data.longitude-degrees.js +0 -5
- package/lib/esm/data/data.moving-time.js +0 -4
- package/lib/esm/data/data.number-of-satellites.js +0 -7
- package/lib/esm/data/data.number-of.samples.js +0 -4
- package/lib/esm/data/data.number.js +0 -13
- package/lib/esm/data/data.pace-avg.js +0 -8
- package/lib/esm/data/data.pace-max.js +0 -8
- package/lib/esm/data/data.pace-min.js +0 -8
- package/lib/esm/data/data.pace.js +0 -46
- package/lib/esm/data/data.pause.js +0 -4
- package/lib/esm/data/data.peak-epoc.js +0 -7
- package/lib/esm/data/data.peak-training-effect.js +0 -4
- package/lib/esm/data/data.percent.js +0 -4
- package/lib/esm/data/data.pool-length.js +0 -5
- package/lib/esm/data/data.position.interface.js +0 -1
- package/lib/esm/data/data.position.js +0 -18
- package/lib/esm/data/data.power-avg.js +0 -4
- package/lib/esm/data/data.power-down.js +0 -4
- package/lib/esm/data/data.power-intensity-factor.js +0 -5
- package/lib/esm/data/data.power-left.js +0 -4
- package/lib/esm/data/data.power-max.js +0 -4
- package/lib/esm/data/data.power-min.js +0 -4
- package/lib/esm/data/data.power-normalized.js +0 -4
- package/lib/esm/data/data.power-pedal-smoothness-left.js +0 -4
- package/lib/esm/data/data.power-pedal-smoothness-right.js +0 -4
- package/lib/esm/data/data.power-pod-used.js +0 -7
- package/lib/esm/data/data.power-right.js +0 -4
- package/lib/esm/data/data.power-torque-effectiveness-left.js +0 -4
- package/lib/esm/data/data.power-torque-effectiveness-right.js +0 -4
- package/lib/esm/data/data.power-training-stress-score.js +0 -5
- package/lib/esm/data/data.power-up.js +0 -4
- package/lib/esm/data/data.power-work.js +0 -5
- package/lib/esm/data/data.power-zone-five-duration.js +0 -4
- package/lib/esm/data/data.power-zone-four-duration.js +0 -4
- package/lib/esm/data/data.power-zone-one-duration.js +0 -4
- package/lib/esm/data/data.power-zone-three-duration.js +0 -4
- package/lib/esm/data/data.power-zone-two-duration.js +0 -4
- package/lib/esm/data/data.power.js +0 -8
- package/lib/esm/data/data.recovery-time.js +0 -7
- package/lib/esm/data/data.rider-position-change-event.js +0 -8
- package/lib/esm/data/data.right-balance.js +0 -4
- package/lib/esm/data/data.rpe.js +0 -23
- package/lib/esm/data/data.satellite-5-best-snr.js +0 -4
- package/lib/esm/data/data.sea-level-pressure.js +0 -5
- package/lib/esm/data/data.spec.js +0 -25
- package/lib/esm/data/data.speed-avg.js +0 -46
- package/lib/esm/data/data.speed-max.js +0 -46
- package/lib/esm/data/data.speed-min.js +0 -46
- package/lib/esm/data/data.speed-zone-five-duration.js +0 -4
- package/lib/esm/data/data.speed-zone-four-duration.js +0 -4
- package/lib/esm/data/data.speed-zone-one-duration.js +0 -4
- package/lib/esm/data/data.speed-zone-three-duration.js +0 -4
- package/lib/esm/data/data.speed-zone-two-duration.js +0 -4
- package/lib/esm/data/data.speed.js +0 -88
- package/lib/esm/data/data.sport-profile-name.js +0 -4
- package/lib/esm/data/data.stance-time.js +0 -5
- package/lib/esm/data/data.start-altitude.js +0 -4
- package/lib/esm/data/data.start-event.js +0 -4
- package/lib/esm/data/data.start-position.js +0 -4
- package/lib/esm/data/data.step-length.js +0 -4
- package/lib/esm/data/data.steps-old.js +0 -4
- package/lib/esm/data/data.steps.js +0 -4
- package/lib/esm/data/data.stop-all-event.js +0 -4
- package/lib/esm/data/data.stop-event.js +0 -4
- package/lib/esm/data/data.store.export.spec.js +0 -66
- package/lib/esm/data/data.store.js +0 -1213
- package/lib/esm/data/data.string.js +0 -13
- package/lib/esm/data/data.stryd-altitude.js +0 -4
- package/lib/esm/data/data.stryd-distance.js +0 -4
- package/lib/esm/data/data.stryd-speed.js +0 -4
- package/lib/esm/data/data.swim-pace-avg.js +0 -8
- package/lib/esm/data/data.swim-pace-max.js +0 -8
- package/lib/esm/data/data.swim-pace-min.js +0 -8
- package/lib/esm/data/data.swim-pace.js +0 -19
- package/lib/esm/data/data.swolf-25m.js +0 -4
- package/lib/esm/data/data.swolf-50m.js +0 -4
- package/lib/esm/data/data.target-distance.js +0 -4
- package/lib/esm/data/data.target-heart-rate-zone.js +0 -4
- package/lib/esm/data/data.target-power-zone.js +0 -4
- package/lib/esm/data/data.target-speed-zone.js +0 -4
- package/lib/esm/data/data.target-time.js +0 -4
- package/lib/esm/data/data.temperature-avg.js +0 -4
- package/lib/esm/data/data.temperature-max.js +0 -4
- package/lib/esm/data/data.temperature-min.js +0 -4
- package/lib/esm/data/data.temperature.js +0 -8
- package/lib/esm/data/data.time.js +0 -6
- package/lib/esm/data/data.timer-time.js +0 -4
- package/lib/esm/data/data.vertical-oscillation.js +0 -5
- package/lib/esm/data/data.vertical-ratio.js +0 -5
- package/lib/esm/data/data.vertical-speed-avg.js +0 -53
- package/lib/esm/data/data.vertical-speed-max.js +0 -53
- package/lib/esm/data/data.vertical-speed-min.js +0 -53
- package/lib/esm/data/data.vertical-speed.js +0 -103
- package/lib/esm/data/data.vo2-max.js +0 -7
- package/lib/esm/data/ibi/data.ibi.filters.js +0 -52
- package/lib/esm/data/ibi/data.ibi.js +0 -98
- package/lib/esm/data/ibi/data.ibi.spec.js +0 -66
- package/lib/esm/duration/duration.class.abstract.js +0 -36
- package/lib/esm/duration/duration.class.interface.js +0 -1
- package/lib/esm/errors/duration-exceeded-event-lib.error.js +0 -9
- package/lib/esm/errors/empty-event-sports-libs.error.js +0 -9
- package/lib/esm/errors/event-lib.error.js +0 -8
- package/lib/esm/errors/lib.error.js +0 -6
- package/lib/esm/errors/parsing-event-lib.error.js +0 -9
- package/lib/esm/events/adapters/exporters/exporter.gpx.js +0 -75
- package/lib/esm/events/adapters/exporters/exporter.interface.js +0 -1
- package/lib/esm/events/adapters/exporters/exporter.json.js +0 -20
- package/lib/esm/events/adapters/file-type.enum.js +0 -7
- package/lib/esm/events/adapters/importers/fit/importer.fit.ant-plus.device.names.js +0 -25
- package/lib/esm/events/adapters/importers/fit/importer.fit.coros.device.names.js +0 -5
- package/lib/esm/events/adapters/importers/fit/importer.fit.development.device.names.js +0 -4
- package/lib/esm/events/adapters/importers/fit/importer.fit.garmin.device.names.js +0 -462
- package/lib/esm/events/adapters/importers/fit/importer.fit.garmin.profile.data.js +0 -877
- package/lib/esm/events/adapters/importers/fit/importer.fit.garmin.profile.mapper.js +0 -106
- package/lib/esm/events/adapters/importers/fit/importer.fit.garmin.profile.mapper.spec.js +0 -32
- package/lib/esm/events/adapters/importers/fit/importer.fit.hammerhead.device.names.js +0 -4
- package/lib/esm/events/adapters/importers/fit/importer.fit.integration.spec.js +0 -44
- package/lib/esm/events/adapters/importers/fit/importer.fit.js +0 -978
- package/lib/esm/events/adapters/importers/fit/importer.fit.lezyne.device.names.js +0 -3
- package/lib/esm/events/adapters/importers/fit/importer.fit.magellan.device.names.js +0 -5
- package/lib/esm/events/adapters/importers/fit/importer.fit.mapper.js +0 -231
- package/lib/esm/events/adapters/importers/fit/importer.fit.saris.device.names.js +0 -3
- package/lib/esm/events/adapters/importers/fit/importer.fit.spec.js +0 -326
- package/lib/esm/events/adapters/importers/fit/importer.fit.srm.device.names.js +0 -7
- package/lib/esm/events/adapters/importers/fit/importer.fit.suunto.device.names.js +0 -16
- package/lib/esm/events/adapters/importers/fit/importer.fit.wahoo.device.names.js +0 -10
- package/lib/esm/events/adapters/importers/gpx/gx-parser.js +0 -36
- package/lib/esm/events/adapters/importers/gpx/importer.gpx.integration.spec.js +0 -44
- package/lib/esm/events/adapters/importers/gpx/importer.gpx.js +0 -102
- package/lib/esm/events/adapters/importers/gpx/importer.gpx.mapper.js +0 -142
- package/lib/esm/events/adapters/importers/gpx/importer.gpx.spec.js +0 -71
- package/lib/esm/events/adapters/importers/json/importer.json.js +0 -160
- package/lib/esm/events/adapters/importers/sample-info.interface.js +0 -1
- package/lib/esm/events/adapters/importers/suunto/importer.suunto.activity.ids.js +0 -85
- package/lib/esm/events/adapters/importers/suunto/importer.suunto.device.names.js +0 -26
- package/lib/esm/events/adapters/importers/suunto/importer.suunto.integration.spec.js +0 -44
- package/lib/esm/events/adapters/importers/suunto/importer.suunto.json.js +0 -717
- package/lib/esm/events/adapters/importers/suunto/importer.suunto.sml.js +0 -125
- package/lib/esm/events/adapters/importers/tcx/importer.tcx.integration.spec.js +0 -46
- package/lib/esm/events/adapters/importers/tcx/importer.tcx.js +0 -442
- package/lib/esm/events/adapters/importers/tcx/importer.tcx.mapper.js +0 -91
- package/lib/esm/events/adapters/importers/tcx/utils.tcx.js +0 -36
- package/lib/esm/events/event.interface.js +0 -1
- package/lib/esm/events/event.js +0 -123
- package/lib/esm/events/event.json.interface.js +0 -1
- package/lib/esm/events/event.spec.js +0 -51
- package/lib/esm/events/utilities/activity.utilities.js +0 -1841
- package/lib/esm/events/utilities/activity.utilities.spec.js +0 -373
- package/lib/esm/events/utilities/event.utilities.js +0 -57
- package/lib/esm/events/utilities/grade-calculator/grade-calculator.js +0 -121
- package/lib/esm/events/utilities/grade-calculator/grade-calculator.spec.js +0 -93
- package/lib/esm/events/utilities/grade-calculator/low-pass-filter.js +0 -86
- package/lib/esm/events/utilities/helpers.js +0 -162
- package/lib/esm/geodesy/adapters/adapter.interface.js +0 -1
- package/lib/esm/geodesy/adapters/geolib.adapter.js +0 -28
- package/lib/esm/id/id.abstract.class.js +0 -9
- package/lib/esm/id/id.class.interface.js +0 -1
- package/lib/esm/id/id.class.spec.js +0 -13
- package/lib/esm/intensity-zones/intensity-zones.interface.js +0 -1
- package/lib/esm/intensity-zones/intensity-zones.js +0 -29
- package/lib/esm/intensity-zones/intensity-zones.json.interface.js +0 -1
- package/lib/esm/intensity-zones/intensity-zones.spec.js +0 -30
- package/lib/esm/laps/lap.interface.js +0 -1
- package/lib/esm/laps/lap.js +0 -29
- package/lib/esm/laps/lap.json.interface.js +0 -1
- package/lib/esm/laps/lap.types.js +0 -52
- package/lib/esm/meta-data/event-meta-data.interface.js +0 -6
- package/lib/esm/meta-data/meta-data.js +0 -57
- package/lib/esm/meta-data/meta-data.json.interface.js +0 -1
- package/lib/esm/privacy/privacy.class.interface.js +0 -5
- package/lib/esm/serializable/serializable.class.interface.js +0 -1
- package/lib/esm/service-tokens/oauth1-service-token.interface.js +0 -1
- package/lib/esm/service-tokens/oauth2-service-token.interface.js +0 -1
- package/lib/esm/specs/activities-parsing.integration.spec.js +0 -1847
- package/lib/esm/specs/activity-duration-stream.integration.spec.js +0 -57
- package/lib/esm/specs/fixtures/streams/strava/rides/3171472783.json +0 -52534
- package/lib/esm/specs/fixtures/streams/strava/rides/3171487458.json +0 -78818
- package/lib/esm/specs/fixtures/streams/strava/rides/343080886.json +0 -105090
- package/lib/esm/specs/fixtures/streams/strava/rides/5910143591.json +0 -110711
- package/lib/esm/specs/fixtures/streams/strava/runs/2451375851.json +0 -74846
- package/lib/esm/specs/fixtures/streams/strava/runs/2709634581.json +0 -66817
- package/lib/esm/specs/fixtures/streams/strava/runs/3156040843.json +0 -17594
- package/lib/esm/specs/fixtures/streams/strava/runs/3182900697.json +0 -17322
- package/lib/esm/specs/fixtures/streams/strava/runs/3183465494.json +0 -20463
- package/lib/esm/specs/fixtures/streams/strava/runs/3183490558.json +0 -58202
- package/lib/esm/specs/spec-utils.js +0 -159
- package/lib/esm/specs/strava-streams-compliance.spec.js +0 -951
- package/lib/esm/stats/stats.class.abstract.js +0 -32
- package/lib/esm/stats/stats.class.interface.js +0 -1
- package/lib/esm/stats/stats.json.interface.js +0 -1
- package/lib/esm/streams/compressed.stream.interface.js +0 -12
- package/lib/esm/streams/ibi-stream.js +0 -43
- package/lib/esm/streams/low-pass.stream.filter.js +0 -9
- package/lib/esm/streams/stream.filter.interface.js +0 -1
- package/lib/esm/streams/stream.interface.js +0 -1
- package/lib/esm/streams/stream.js +0 -72
- package/lib/esm/streams/stream.spec.js +0 -168
- package/lib/esm/tiles/tile.settings.interface.js +0 -41
- package/lib/esm/users/settings/dashboard/user.dashboard.settings.interface.js +0 -13
- package/lib/esm/users/settings/user.app.settings.interface.js +0 -5
- package/lib/esm/users/settings/user.chart.settings.interface.js +0 -23
- package/lib/esm/users/settings/user.map.settings.interface.js +0 -22
- package/lib/esm/users/settings/user.my-tracks.settings.interface.js +0 -1
- package/lib/esm/users/settings/user.settings.interface.js +0 -1
- package/lib/esm/users/settings/user.stats-settings.interface.js +0 -1
- package/lib/esm/users/settings/user.summaries.settings.interface.js +0 -1
- package/lib/esm/users/settings/user.unit.settings.interface.js +0 -73
- package/lib/esm/users/user.account.privileges.interface.js +0 -1
- package/lib/esm/users/user.export-to-csv.settings.interface.js +0 -1
- package/lib/esm/users/user.interface.js +0 -1
- package/lib/esm/users/user.js +0 -38
- package/lib/esm/users/user.service.meta.interface.js +0 -1
|
@@ -1,231 +0,0 @@
|
|
|
1
|
-
import { DataLatitudeDegrees } from '../../../../data/data.latitude-degrees';
|
|
2
|
-
import { DataAltitude } from '../../../../data/data.altitude';
|
|
3
|
-
import { DataHeartRate } from '../../../../data/data.heart-rate';
|
|
4
|
-
import { DataCadence } from '../../../../data/data.cadence';
|
|
5
|
-
import { DataTemperature } from '../../../../data/data.temperature';
|
|
6
|
-
import { DataDistance } from '../../../../data/data.distance';
|
|
7
|
-
import { DataSpeed } from '../../../../data/data.speed';
|
|
8
|
-
import { DataVerticalSpeed } from '../../../../data/data.vertical-speed';
|
|
9
|
-
import { DataPower } from '../../../../data/data.power';
|
|
10
|
-
import { DataLongitudeDegrees } from '../../../../data/data.longitude-degrees';
|
|
11
|
-
import { DataFormPower } from '../../../../data/data.form-power';
|
|
12
|
-
import { DataLegStiffness } from '../../../../data/data.leg-stiffness';
|
|
13
|
-
import { DataVerticalOscillation } from '../../../../data/data.vertical-oscillation';
|
|
14
|
-
import { isNumber } from '../../../utilities/helpers';
|
|
15
|
-
import { DataAccumulatedPower } from '../../../../data/data.accumulated-power';
|
|
16
|
-
import { DataStrydAltitude } from '../../../../data/data.stryd-altitude';
|
|
17
|
-
import { DataStrydDistance } from '../../../../data/data.stryd-distance';
|
|
18
|
-
import { DataStrydSpeed } from '../../../../data/data.stryd-speed';
|
|
19
|
-
import { DataRightBalance } from '../../../../data/data.right-balance';
|
|
20
|
-
import { DataLeftBalance } from '../../../../data/data.left-balance';
|
|
21
|
-
import { DataStanceTime } from '../../../../data/data.stance-time';
|
|
22
|
-
import { DataStanceTimeBalanceLeft } from '../../../../data/data-stance-time-balance-left';
|
|
23
|
-
import { DataStepLength } from '../../../../data/data.step-length';
|
|
24
|
-
import { DataVerticalRatio } from '../../../../data/data.vertical-ratio';
|
|
25
|
-
import { DataGroundTime } from '../../../../data/data.ground-time';
|
|
26
|
-
import { DataAirPower } from '../../../../data/data.air-power';
|
|
27
|
-
import { ALTITUDE_PRECISION_NUMBER_OF_DECIMAL_PLACES, GNSS_DEGREES_PRECISION_NUMBER_OF_DECIMAL_PLACES } from '../../../../constants/constants';
|
|
28
|
-
export const FITSampleMapper = [
|
|
29
|
-
{
|
|
30
|
-
dataType: DataLatitudeDegrees.type,
|
|
31
|
-
getSampleValue: (sample) => {
|
|
32
|
-
return isNumber(sample.position_lat)
|
|
33
|
-
? Math.round(sample.position_lat * Math.pow(10, GNSS_DEGREES_PRECISION_NUMBER_OF_DECIMAL_PLACES)) /
|
|
34
|
-
Math.pow(10, GNSS_DEGREES_PRECISION_NUMBER_OF_DECIMAL_PLACES)
|
|
35
|
-
: sample.position_lat;
|
|
36
|
-
}
|
|
37
|
-
},
|
|
38
|
-
{
|
|
39
|
-
dataType: DataLongitudeDegrees.type,
|
|
40
|
-
getSampleValue: (sample) => {
|
|
41
|
-
return isNumber(sample.position_long)
|
|
42
|
-
? Math.round(sample.position_long * Math.pow(10, GNSS_DEGREES_PRECISION_NUMBER_OF_DECIMAL_PLACES)) /
|
|
43
|
-
Math.pow(10, GNSS_DEGREES_PRECISION_NUMBER_OF_DECIMAL_PLACES)
|
|
44
|
-
: sample.position_long;
|
|
45
|
-
}
|
|
46
|
-
},
|
|
47
|
-
{
|
|
48
|
-
dataType: DataDistance.type,
|
|
49
|
-
getSampleValue: (sample) => {
|
|
50
|
-
return isNumber(sample.distance) ? sample.distance : sample.Distance;
|
|
51
|
-
}
|
|
52
|
-
},
|
|
53
|
-
{
|
|
54
|
-
dataType: DataHeartRate.type,
|
|
55
|
-
getSampleValue: (sample) => {
|
|
56
|
-
return sample.heart_rate;
|
|
57
|
-
}
|
|
58
|
-
},
|
|
59
|
-
{
|
|
60
|
-
dataType: DataAltitude.type,
|
|
61
|
-
getSampleValue: (sample) => {
|
|
62
|
-
const altitude = isNumber(sample.enhanced_altitude)
|
|
63
|
-
? sample.enhanced_altitude
|
|
64
|
-
: isNumber(sample.EnhancedAltitude)
|
|
65
|
-
? sample.EnhancedAltitude
|
|
66
|
-
: isNumber(sample.altitude)
|
|
67
|
-
? sample.altitude
|
|
68
|
-
: isNumber(sample.Altitude)
|
|
69
|
-
? sample.Altitude
|
|
70
|
-
: null;
|
|
71
|
-
return isNumber(altitude)
|
|
72
|
-
? Math.round(altitude * Math.pow(10, ALTITUDE_PRECISION_NUMBER_OF_DECIMAL_PLACES)) /
|
|
73
|
-
Math.pow(10, ALTITUDE_PRECISION_NUMBER_OF_DECIMAL_PLACES)
|
|
74
|
-
: altitude;
|
|
75
|
-
}
|
|
76
|
-
},
|
|
77
|
-
{
|
|
78
|
-
dataType: DataStrydAltitude.type,
|
|
79
|
-
getSampleValue: (sample) => {
|
|
80
|
-
return isNumber(sample.Elevation)
|
|
81
|
-
? Math.round(sample.Elevation * Math.pow(10, ALTITUDE_PRECISION_NUMBER_OF_DECIMAL_PLACES)) /
|
|
82
|
-
Math.pow(10, ALTITUDE_PRECISION_NUMBER_OF_DECIMAL_PLACES)
|
|
83
|
-
: sample.Elevation;
|
|
84
|
-
}
|
|
85
|
-
},
|
|
86
|
-
{
|
|
87
|
-
dataType: DataStrydDistance.type,
|
|
88
|
-
getSampleValue: (sample) => {
|
|
89
|
-
return sample.Distance;
|
|
90
|
-
}
|
|
91
|
-
},
|
|
92
|
-
{
|
|
93
|
-
dataType: DataStrydSpeed.type,
|
|
94
|
-
getSampleValue: (sample) => {
|
|
95
|
-
return sample.Speed;
|
|
96
|
-
}
|
|
97
|
-
},
|
|
98
|
-
{
|
|
99
|
-
dataType: DataCadence.type,
|
|
100
|
-
getSampleValue: (sample) => {
|
|
101
|
-
let cadenceValue = sample.cadence;
|
|
102
|
-
if (isNumber(sample.fractional_cadence)) {
|
|
103
|
-
cadenceValue += sample.fractional_cadence;
|
|
104
|
-
}
|
|
105
|
-
return cadenceValue;
|
|
106
|
-
}
|
|
107
|
-
},
|
|
108
|
-
{
|
|
109
|
-
dataType: DataSpeed.type,
|
|
110
|
-
getSampleValue: (sample) => {
|
|
111
|
-
if (isNumber(sample.enhanced_speed)) {
|
|
112
|
-
return sample.enhanced_speed;
|
|
113
|
-
}
|
|
114
|
-
if (isNumber(sample.EnhancedSpeed)) {
|
|
115
|
-
return sample.EnhancedSpeed;
|
|
116
|
-
}
|
|
117
|
-
if (isNumber(sample.speed)) {
|
|
118
|
-
return sample.speed;
|
|
119
|
-
}
|
|
120
|
-
if (isNumber(sample.Speed)) {
|
|
121
|
-
return sample.Speed;
|
|
122
|
-
}
|
|
123
|
-
return null;
|
|
124
|
-
}
|
|
125
|
-
},
|
|
126
|
-
{
|
|
127
|
-
dataType: DataVerticalSpeed.type,
|
|
128
|
-
getSampleValue: (sample) => {
|
|
129
|
-
return sample.vertical_speed;
|
|
130
|
-
}
|
|
131
|
-
},
|
|
132
|
-
{
|
|
133
|
-
dataType: DataPower.type,
|
|
134
|
-
getSampleValue: (sample, sampleInfo) => {
|
|
135
|
-
// Ensure power stream compliance when in some cases power sample field could be missing even if others samples have it
|
|
136
|
-
// Just set watts to 0 when this happen
|
|
137
|
-
// Case example: ride file "7432332116.fit" from integration tests
|
|
138
|
-
const watts = isNumber(sample.power) ? sample.power : isNumber(sample.Power) ? sample.Power : sample.RP_Power;
|
|
139
|
-
return (sampleInfo === null || sampleInfo === void 0 ? void 0 : sampleInfo.hasPowerMeter) ? watts || 0 : null;
|
|
140
|
-
}
|
|
141
|
-
},
|
|
142
|
-
{
|
|
143
|
-
dataType: DataAccumulatedPower.type,
|
|
144
|
-
getSampleValue: (sample) => {
|
|
145
|
-
return sample.accumulated_power;
|
|
146
|
-
}
|
|
147
|
-
},
|
|
148
|
-
{
|
|
149
|
-
dataType: DataTemperature.type,
|
|
150
|
-
getSampleValue: (sample) => {
|
|
151
|
-
return sample.temperature;
|
|
152
|
-
}
|
|
153
|
-
},
|
|
154
|
-
{
|
|
155
|
-
dataType: DataFormPower.type,
|
|
156
|
-
getSampleValue: (sample) => {
|
|
157
|
-
return sample['Form Power'];
|
|
158
|
-
}
|
|
159
|
-
},
|
|
160
|
-
{
|
|
161
|
-
dataType: DataAirPower.type,
|
|
162
|
-
getSampleValue: (sample) => {
|
|
163
|
-
return sample['Air Power'];
|
|
164
|
-
}
|
|
165
|
-
},
|
|
166
|
-
{
|
|
167
|
-
dataType: DataGroundTime.type,
|
|
168
|
-
getSampleValue: (sample) => {
|
|
169
|
-
return sample['Ground Time'] / 1000;
|
|
170
|
-
}
|
|
171
|
-
},
|
|
172
|
-
{
|
|
173
|
-
dataType: DataLegStiffness.type,
|
|
174
|
-
getSampleValue: (sample) => {
|
|
175
|
-
return sample['Leg Spring Stiffness'];
|
|
176
|
-
}
|
|
177
|
-
},
|
|
178
|
-
{
|
|
179
|
-
dataType: DataVerticalOscillation.type,
|
|
180
|
-
getSampleValue: (sample) => {
|
|
181
|
-
return sample.vertical_oscillation;
|
|
182
|
-
}
|
|
183
|
-
},
|
|
184
|
-
{
|
|
185
|
-
dataType: DataRightBalance.type,
|
|
186
|
-
getSampleValue: (sample) => {
|
|
187
|
-
if (!sample.left_right_balance) {
|
|
188
|
-
return null;
|
|
189
|
-
}
|
|
190
|
-
return sample.left_right_balance.right === true
|
|
191
|
-
? sample.left_right_balance.value
|
|
192
|
-
: 100 - sample.left_right_balance.value;
|
|
193
|
-
}
|
|
194
|
-
},
|
|
195
|
-
// @todo if conservation of data is needed this can be taken of and generated on the fly
|
|
196
|
-
{
|
|
197
|
-
dataType: DataLeftBalance.type,
|
|
198
|
-
getSampleValue: (sample) => {
|
|
199
|
-
if (!sample.left_right_balance) {
|
|
200
|
-
return null;
|
|
201
|
-
}
|
|
202
|
-
return sample.left_right_balance.right === false
|
|
203
|
-
? sample.left_right_balance.value
|
|
204
|
-
: 100 - sample.left_right_balance.value;
|
|
205
|
-
}
|
|
206
|
-
},
|
|
207
|
-
{
|
|
208
|
-
dataType: DataStanceTime.type,
|
|
209
|
-
getSampleValue: (sample) => {
|
|
210
|
-
return sample.stance_time;
|
|
211
|
-
}
|
|
212
|
-
},
|
|
213
|
-
{
|
|
214
|
-
dataType: DataStanceTimeBalanceLeft.type,
|
|
215
|
-
getSampleValue: (sample) => {
|
|
216
|
-
return sample.stance_time_balance; // The field sample refers to the balance on left leg
|
|
217
|
-
}
|
|
218
|
-
},
|
|
219
|
-
{
|
|
220
|
-
dataType: DataStepLength.type,
|
|
221
|
-
getSampleValue: (sample) => {
|
|
222
|
-
return sample.step_length / 1000;
|
|
223
|
-
}
|
|
224
|
-
},
|
|
225
|
-
{
|
|
226
|
-
dataType: DataVerticalRatio.type,
|
|
227
|
-
getSampleValue: (sample) => {
|
|
228
|
-
return sample.vertical_ratio;
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
];
|
|
@@ -1,326 +0,0 @@
|
|
|
1
|
-
import { EventImporterFIT } from './importer.fit';
|
|
2
|
-
describe('EventImporterFIT', () => {
|
|
3
|
-
describe('Handle device creator', () => {
|
|
4
|
-
function generateFitDeviceDataObject(manufacturer = null, productId = -1, productName = null) {
|
|
5
|
-
const data = {};
|
|
6
|
-
if (manufacturer !== null) {
|
|
7
|
-
data.manufacturer = manufacturer;
|
|
8
|
-
}
|
|
9
|
-
if (productId !== -1) {
|
|
10
|
-
data.product = productId;
|
|
11
|
-
}
|
|
12
|
-
if (productName) {
|
|
13
|
-
data.product_name = productName;
|
|
14
|
-
}
|
|
15
|
-
return {
|
|
16
|
-
file_ids: [data]
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
describe('Recognized', () => {
|
|
20
|
-
it('should recognize a known Suunto device', done => {
|
|
21
|
-
const manufacturer = 'suunto';
|
|
22
|
-
const expectedName = 'Suunto Ambit3 Peak';
|
|
23
|
-
const productId = 22;
|
|
24
|
-
const fitDataObject = generateFitDeviceDataObject(manufacturer, productId);
|
|
25
|
-
// When
|
|
26
|
-
const creator = EventImporterFIT.getCreatorFromFitDataObject(fitDataObject);
|
|
27
|
-
// Then
|
|
28
|
-
expect(creator.isRecognized).toBeTruthy();
|
|
29
|
-
expect(creator.name).toEqual(expectedName);
|
|
30
|
-
expect(creator.manufacturer).toEqual(manufacturer);
|
|
31
|
-
done();
|
|
32
|
-
});
|
|
33
|
-
it('should recognize a known Coros device', done => {
|
|
34
|
-
const manufacturer = 'coros';
|
|
35
|
-
const expectedName = 'Coros APEX Pro';
|
|
36
|
-
const productId = 841;
|
|
37
|
-
const fitDataObject = generateFitDeviceDataObject(manufacturer, productId);
|
|
38
|
-
// When
|
|
39
|
-
const creator = EventImporterFIT.getCreatorFromFitDataObject(fitDataObject);
|
|
40
|
-
// Then
|
|
41
|
-
expect(creator.isRecognized).toBeTruthy();
|
|
42
|
-
expect(creator.name).toEqual(expectedName);
|
|
43
|
-
expect(creator.manufacturer).toEqual(manufacturer);
|
|
44
|
-
done();
|
|
45
|
-
});
|
|
46
|
-
it('should recognize a known Garmin device', done => {
|
|
47
|
-
const manufacturer = 'garmin';
|
|
48
|
-
const expectedName = 'Garmin Edge 1000';
|
|
49
|
-
const productId = 1836;
|
|
50
|
-
const fitDataObject = generateFitDeviceDataObject(manufacturer, productId);
|
|
51
|
-
// When
|
|
52
|
-
const creator = EventImporterFIT.getCreatorFromFitDataObject(fitDataObject);
|
|
53
|
-
// Then
|
|
54
|
-
expect(creator.isRecognized).toBeTruthy();
|
|
55
|
-
expect(creator.name).toEqual(expectedName);
|
|
56
|
-
expect(creator.manufacturer).toEqual(manufacturer);
|
|
57
|
-
done();
|
|
58
|
-
});
|
|
59
|
-
it('should recognize a known Wahoo device', done => {
|
|
60
|
-
const manufacturer = 'wahoo_fitness';
|
|
61
|
-
const expectedName = 'Wahoo ELEMNT BOLT';
|
|
62
|
-
const productId = 31;
|
|
63
|
-
const fitDataObject = generateFitDeviceDataObject(manufacturer, productId);
|
|
64
|
-
// When
|
|
65
|
-
const creator = EventImporterFIT.getCreatorFromFitDataObject(fitDataObject);
|
|
66
|
-
// Then
|
|
67
|
-
expect(creator.isRecognized).toBeTruthy();
|
|
68
|
-
expect(creator.name).toEqual(expectedName);
|
|
69
|
-
expect(creator.manufacturer).toEqual(manufacturer);
|
|
70
|
-
done();
|
|
71
|
-
});
|
|
72
|
-
it('should recognize a known hammerhead device', done => {
|
|
73
|
-
const manufacturer = 'hammerhead';
|
|
74
|
-
const expectedName = 'Hammerhead Karoo 2';
|
|
75
|
-
const productId = 2;
|
|
76
|
-
const fitDataObject = generateFitDeviceDataObject(manufacturer, productId);
|
|
77
|
-
// When
|
|
78
|
-
const creator = EventImporterFIT.getCreatorFromFitDataObject(fitDataObject);
|
|
79
|
-
// Then
|
|
80
|
-
expect(creator.isRecognized).toBeTruthy();
|
|
81
|
-
expect(creator.name).toEqual(expectedName);
|
|
82
|
-
expect(creator.manufacturer).toEqual(manufacturer);
|
|
83
|
-
done();
|
|
84
|
-
});
|
|
85
|
-
it('should recognize a known SRM device', done => {
|
|
86
|
-
const manufacturer = 'srm';
|
|
87
|
-
const expectedName = 'Srm PC8';
|
|
88
|
-
const productId = 8;
|
|
89
|
-
const fitDataObject = generateFitDeviceDataObject(manufacturer, productId);
|
|
90
|
-
// When
|
|
91
|
-
const creator = EventImporterFIT.getCreatorFromFitDataObject(fitDataObject);
|
|
92
|
-
// Then
|
|
93
|
-
expect(creator.isRecognized).toBeTruthy();
|
|
94
|
-
expect(creator.name).toEqual(expectedName);
|
|
95
|
-
expect(creator.manufacturer).toEqual(manufacturer);
|
|
96
|
-
done();
|
|
97
|
-
});
|
|
98
|
-
it('should recognize a known zwift virtual device', done => {
|
|
99
|
-
const manufacturer = 'zwift';
|
|
100
|
-
const expectedName = 'Zwift';
|
|
101
|
-
const fitDataObject = generateFitDeviceDataObject(manufacturer);
|
|
102
|
-
// When
|
|
103
|
-
const creator = EventImporterFIT.getCreatorFromFitDataObject(fitDataObject);
|
|
104
|
-
// Then
|
|
105
|
-
expect(creator.isRecognized).toBeTruthy();
|
|
106
|
-
expect(creator.name).toEqual(expectedName);
|
|
107
|
-
expect(creator.manufacturer).toEqual(manufacturer);
|
|
108
|
-
done();
|
|
109
|
-
});
|
|
110
|
-
it('should recognize a known Rouvy virtual device', done => {
|
|
111
|
-
const manufacturer = 'virtualtraining';
|
|
112
|
-
const expectedName = 'Rouvy';
|
|
113
|
-
const fitDataObject = generateFitDeviceDataObject(manufacturer, 1);
|
|
114
|
-
// When
|
|
115
|
-
const creator = EventImporterFIT.getCreatorFromFitDataObject(fitDataObject);
|
|
116
|
-
// Then
|
|
117
|
-
expect(creator.isRecognized).toBeTruthy();
|
|
118
|
-
expect(creator.name).toEqual(expectedName);
|
|
119
|
-
expect(creator.manufacturer).toEqual(manufacturer);
|
|
120
|
-
done();
|
|
121
|
-
});
|
|
122
|
-
it('should recognize a known Wahoo SYSTM virtual device', done => {
|
|
123
|
-
const manufacturer = 'the_sufferfest';
|
|
124
|
-
const expectedName = 'Wahoo SYSTM';
|
|
125
|
-
const productId = 1231;
|
|
126
|
-
const fitDataObject = generateFitDeviceDataObject(manufacturer, productId);
|
|
127
|
-
// When
|
|
128
|
-
const creator = EventImporterFIT.getCreatorFromFitDataObject(fitDataObject);
|
|
129
|
-
// Then
|
|
130
|
-
expect(creator.isRecognized).toBeTruthy();
|
|
131
|
-
expect(creator.name).toEqual(expectedName);
|
|
132
|
-
expect(creator.manufacturer).toEqual(manufacturer);
|
|
133
|
-
done();
|
|
134
|
-
});
|
|
135
|
-
it('should recognize a known development device', done => {
|
|
136
|
-
const manufacturer = 'development';
|
|
137
|
-
const expectedName = 'Zwift';
|
|
138
|
-
const productId = 15706;
|
|
139
|
-
const fitDataObject = generateFitDeviceDataObject(manufacturer, productId);
|
|
140
|
-
// When
|
|
141
|
-
const creator = EventImporterFIT.getCreatorFromFitDataObject(fitDataObject);
|
|
142
|
-
// Then
|
|
143
|
-
expect(creator.isRecognized).toBeTruthy();
|
|
144
|
-
expect(creator.name).toEqual(expectedName);
|
|
145
|
-
expect(creator.manufacturer).toEqual(manufacturer);
|
|
146
|
-
done();
|
|
147
|
-
});
|
|
148
|
-
});
|
|
149
|
-
describe('Non recognized', () => {
|
|
150
|
-
describe('Known manufacturer with unknown productId & known product name', () => {
|
|
151
|
-
it('should format a non-recognized development device with known productId & unknown product name', done => {
|
|
152
|
-
const manufacturer = 'development';
|
|
153
|
-
const productId = 42;
|
|
154
|
-
const expectedName = 'Unknown';
|
|
155
|
-
const fitDataObject = generateFitDeviceDataObject(manufacturer, productId);
|
|
156
|
-
// When
|
|
157
|
-
const creator = EventImporterFIT.getCreatorFromFitDataObject(fitDataObject);
|
|
158
|
-
// Then
|
|
159
|
-
expect(creator.isRecognized).toBeTruthy();
|
|
160
|
-
expect(creator.name).toEqual(expectedName);
|
|
161
|
-
expect(creator.manufacturer).toEqual(manufacturer);
|
|
162
|
-
done();
|
|
163
|
-
});
|
|
164
|
-
});
|
|
165
|
-
describe('Known manufacturer with unknown productId & known product name', () => {
|
|
166
|
-
it('should format a non-recognized Coros device with unknown productId & known product name', done => {
|
|
167
|
-
const manufacturer = 'coros';
|
|
168
|
-
const productId = Math.random();
|
|
169
|
-
const productName = 'COROS REFLEX Fake';
|
|
170
|
-
const expectedName = 'Coros REFLEX Fake';
|
|
171
|
-
const fitDataObject = generateFitDeviceDataObject(manufacturer, productId, productName);
|
|
172
|
-
// When
|
|
173
|
-
const creator = EventImporterFIT.getCreatorFromFitDataObject(fitDataObject);
|
|
174
|
-
// Then
|
|
175
|
-
expect(creator.isRecognized).toBeFalsy();
|
|
176
|
-
expect(creator.name).toEqual(expectedName);
|
|
177
|
-
expect(creator.manufacturer).toEqual(manufacturer);
|
|
178
|
-
done();
|
|
179
|
-
});
|
|
180
|
-
it('should format a non-recognized Wahoo device with unknown productId & known product name', done => {
|
|
181
|
-
const manufacturer = 'wahoo_fitness';
|
|
182
|
-
const productId = Math.random();
|
|
183
|
-
const productName = 'Fake';
|
|
184
|
-
const expectedName = 'Wahoo Fake';
|
|
185
|
-
const fitDataObject = generateFitDeviceDataObject(manufacturer, productId, productName);
|
|
186
|
-
// When
|
|
187
|
-
const creator = EventImporterFIT.getCreatorFromFitDataObject(fitDataObject);
|
|
188
|
-
// Then
|
|
189
|
-
expect(creator.isRecognized).toBeFalsy();
|
|
190
|
-
expect(creator.name).toEqual(expectedName);
|
|
191
|
-
expect(creator.manufacturer).toEqual(manufacturer);
|
|
192
|
-
done();
|
|
193
|
-
});
|
|
194
|
-
});
|
|
195
|
-
describe('Known manufacturer with unknown productId & missing product name', () => {
|
|
196
|
-
it('should format a non-recognized Suunto device with unknown productId & missing product name', done => {
|
|
197
|
-
const manufacturer = 'suunto';
|
|
198
|
-
const expectedName = 'Suunto';
|
|
199
|
-
const productId = Math.random();
|
|
200
|
-
const fitDataObject = generateFitDeviceDataObject(manufacturer, productId);
|
|
201
|
-
// When
|
|
202
|
-
const creator = EventImporterFIT.getCreatorFromFitDataObject(fitDataObject);
|
|
203
|
-
// Then
|
|
204
|
-
expect(creator.isRecognized).toBeFalsy();
|
|
205
|
-
expect(creator.name).toEqual(expectedName);
|
|
206
|
-
expect(creator.manufacturer).toEqual(manufacturer);
|
|
207
|
-
done();
|
|
208
|
-
});
|
|
209
|
-
it('should format a non-recognized Garmin device with unknown productId & missing product name', done => {
|
|
210
|
-
const manufacturer = 'garmin';
|
|
211
|
-
const expectedName = 'Garmin';
|
|
212
|
-
const productId = Math.random();
|
|
213
|
-
const fitDataObject = generateFitDeviceDataObject(manufacturer, productId);
|
|
214
|
-
// When
|
|
215
|
-
const creator = EventImporterFIT.getCreatorFromFitDataObject(fitDataObject);
|
|
216
|
-
// Then
|
|
217
|
-
expect(creator.isRecognized).toBeFalsy();
|
|
218
|
-
expect(creator.name).toEqual(expectedName);
|
|
219
|
-
expect(creator.manufacturer).toEqual(manufacturer);
|
|
220
|
-
done();
|
|
221
|
-
});
|
|
222
|
-
it('should format a non-recognized Wahoo device with unknown productId & missing product name', done => {
|
|
223
|
-
const manufacturer = 'wahoo_fitness';
|
|
224
|
-
const expectedName = 'Wahoo';
|
|
225
|
-
const productId = Math.random();
|
|
226
|
-
const fitDataObject = generateFitDeviceDataObject(manufacturer, productId);
|
|
227
|
-
// When
|
|
228
|
-
const creator = EventImporterFIT.getCreatorFromFitDataObject(fitDataObject);
|
|
229
|
-
// Then
|
|
230
|
-
expect(creator.isRecognized).toBeFalsy();
|
|
231
|
-
expect(creator.name).toEqual(expectedName);
|
|
232
|
-
expect(creator.manufacturer).toEqual(manufacturer);
|
|
233
|
-
done();
|
|
234
|
-
});
|
|
235
|
-
});
|
|
236
|
-
describe('Known manufacturer with missing productId & missing product name', () => {
|
|
237
|
-
it('should format a non-recognized Suunto device without productId && product name', done => {
|
|
238
|
-
const manufacturer = 'suunto';
|
|
239
|
-
const expectedName = 'Suunto';
|
|
240
|
-
const fitDataObject = generateFitDeviceDataObject(manufacturer);
|
|
241
|
-
// When
|
|
242
|
-
const creator = EventImporterFIT.getCreatorFromFitDataObject(fitDataObject);
|
|
243
|
-
// Then
|
|
244
|
-
expect(creator.isRecognized).toBeFalsy();
|
|
245
|
-
expect(creator.name).toEqual(expectedName);
|
|
246
|
-
expect(creator.manufacturer).toEqual(manufacturer);
|
|
247
|
-
done();
|
|
248
|
-
});
|
|
249
|
-
it('should format a non-recognized Garmin device without productId && product name', done => {
|
|
250
|
-
const manufacturer = 'garmin';
|
|
251
|
-
const expectedName = 'Garmin';
|
|
252
|
-
const fitDataObject = generateFitDeviceDataObject(manufacturer);
|
|
253
|
-
// When
|
|
254
|
-
const creator = EventImporterFIT.getCreatorFromFitDataObject(fitDataObject);
|
|
255
|
-
// Then
|
|
256
|
-
expect(creator.isRecognized).toBeFalsy();
|
|
257
|
-
expect(creator.name).toEqual(expectedName);
|
|
258
|
-
expect(creator.manufacturer).toEqual(manufacturer);
|
|
259
|
-
done();
|
|
260
|
-
});
|
|
261
|
-
it('should format a non-recognized Garmin device without productId && product name', done => {
|
|
262
|
-
const manufacturer = 'wahoo_fitness';
|
|
263
|
-
const expectedName = 'Wahoo';
|
|
264
|
-
const fitDataObject = generateFitDeviceDataObject(manufacturer);
|
|
265
|
-
// When
|
|
266
|
-
const creator = EventImporterFIT.getCreatorFromFitDataObject(fitDataObject);
|
|
267
|
-
// Then
|
|
268
|
-
expect(creator.isRecognized).toBeFalsy();
|
|
269
|
-
expect(creator.name).toEqual(expectedName);
|
|
270
|
-
expect(creator.manufacturer).toEqual(manufacturer);
|
|
271
|
-
done();
|
|
272
|
-
});
|
|
273
|
-
});
|
|
274
|
-
describe('Unknown manufacturer with missing productId & missing product name', () => {
|
|
275
|
-
it('should format a non-recognized Suunto device without productId && product name', done => {
|
|
276
|
-
const manufacturer = 'reactive';
|
|
277
|
-
const expectedName = 'Reactive';
|
|
278
|
-
const fitDataObject = generateFitDeviceDataObject(manufacturer);
|
|
279
|
-
// When
|
|
280
|
-
const creator = EventImporterFIT.getCreatorFromFitDataObject(fitDataObject);
|
|
281
|
-
// Then
|
|
282
|
-
expect(creator.isRecognized).toBeFalsy();
|
|
283
|
-
expect(creator.name).toEqual(expectedName);
|
|
284
|
-
expect(creator.manufacturer).toEqual(manufacturer);
|
|
285
|
-
done();
|
|
286
|
-
});
|
|
287
|
-
it('should format a non-recognized Garmin device without productId && product name', done => {
|
|
288
|
-
const manufacturer = 'high_cadence_fitness';
|
|
289
|
-
const expectedName = 'High Cadence Fitness';
|
|
290
|
-
const fitDataObject = generateFitDeviceDataObject(manufacturer);
|
|
291
|
-
// When
|
|
292
|
-
const creator = EventImporterFIT.getCreatorFromFitDataObject(fitDataObject);
|
|
293
|
-
// Then
|
|
294
|
-
expect(creator.isRecognized).toBeFalsy();
|
|
295
|
-
expect(creator.name).toEqual(expectedName);
|
|
296
|
-
expect(creator.manufacturer).toEqual(manufacturer);
|
|
297
|
-
done();
|
|
298
|
-
});
|
|
299
|
-
});
|
|
300
|
-
describe('Empty manufacturer with missing productId & missing product name', () => {
|
|
301
|
-
it('should format a non-recognized device without manufacturer, productId && product name (1)', done => {
|
|
302
|
-
const manufacturer = 0;
|
|
303
|
-
const expectedName = 'Unknown';
|
|
304
|
-
const fitDataObject = generateFitDeviceDataObject(manufacturer);
|
|
305
|
-
// When
|
|
306
|
-
const creator = EventImporterFIT.getCreatorFromFitDataObject(fitDataObject);
|
|
307
|
-
// Then
|
|
308
|
-
expect(creator.isRecognized).toBeFalsy();
|
|
309
|
-
expect(creator.name).toEqual(expectedName);
|
|
310
|
-
expect(creator.manufacturer).toEqual(manufacturer);
|
|
311
|
-
done();
|
|
312
|
-
});
|
|
313
|
-
it('should format a non-recognized device without manufacturer, productId && product name (2)', done => {
|
|
314
|
-
const expectedName = 'Unknown';
|
|
315
|
-
const fitDataObject = generateFitDeviceDataObject();
|
|
316
|
-
// When
|
|
317
|
-
const creator = EventImporterFIT.getCreatorFromFitDataObject(fitDataObject);
|
|
318
|
-
// Then
|
|
319
|
-
expect(creator.isRecognized).toBeFalsy();
|
|
320
|
-
expect(creator.name).toEqual(expectedName);
|
|
321
|
-
done();
|
|
322
|
-
});
|
|
323
|
-
});
|
|
324
|
-
});
|
|
325
|
-
});
|
|
326
|
-
});
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { ImporterSuuntoDeviceNames } from '../suunto/importer.suunto.device.names';
|
|
2
|
-
export const ImporterFitSuuntoDeviceNames = {
|
|
3
|
-
19: ImporterSuuntoDeviceNames.Ambit2,
|
|
4
|
-
28: ImporterSuuntoDeviceNames.Brighton,
|
|
5
|
-
29: ImporterSuuntoDeviceNames.Amsterdam,
|
|
6
|
-
34: ImporterSuuntoDeviceNames.Ibiza,
|
|
7
|
-
35: ImporterSuuntoDeviceNames.Lima,
|
|
8
|
-
36: ImporterSuuntoDeviceNames.Monza,
|
|
9
|
-
32: ImporterSuuntoDeviceNames.Gdansk,
|
|
10
|
-
31: ImporterSuuntoDeviceNames.Forssa,
|
|
11
|
-
30: ImporterSuuntoDeviceNames.Cairo,
|
|
12
|
-
22: ImporterSuuntoDeviceNames['Ambit3 Peak'],
|
|
13
|
-
23: ImporterSuuntoDeviceNames['Ambit3 Sport'],
|
|
14
|
-
24: ImporterSuuntoDeviceNames['Ambit3 Run'],
|
|
15
|
-
25: ImporterSuuntoDeviceNames['Ambit3 Vertical']
|
|
16
|
-
};
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
export class GXParser {
|
|
2
|
-
constructor(xml, domParser = null) {
|
|
3
|
-
domParser = domParser || DOMParser;
|
|
4
|
-
const parser = new domParser();
|
|
5
|
-
const root = parser.parseFromString(xml, 'text/xml');
|
|
6
|
-
return this.parseChild(root.documentElement);
|
|
7
|
-
}
|
|
8
|
-
parseChild(elm) {
|
|
9
|
-
const attrs = {};
|
|
10
|
-
const attributes = elm.attributes;
|
|
11
|
-
for (let i = 0; i < attributes.length; i++) {
|
|
12
|
-
const attr = attributes[i];
|
|
13
|
-
if (attr && attr.value) {
|
|
14
|
-
attrs[attr.name] = attr.value;
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
if (elm.childNodes) {
|
|
18
|
-
const children = elm.childNodes;
|
|
19
|
-
for (let i = 0; i < children.length; i++) {
|
|
20
|
-
const child = children[i];
|
|
21
|
-
const name = child.localName;
|
|
22
|
-
if (!name) {
|
|
23
|
-
continue;
|
|
24
|
-
}
|
|
25
|
-
if (!attrs[name]) {
|
|
26
|
-
attrs[name] = [];
|
|
27
|
-
}
|
|
28
|
-
attrs[name].push(this.parseChild(child));
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
if (Object.keys(attrs).length === 0) {
|
|
32
|
-
return elm.textContent;
|
|
33
|
-
}
|
|
34
|
-
return attrs;
|
|
35
|
-
}
|
|
36
|
-
}
|