UNPKG

@sports-alliance/sports-lib

Version:

A Library to for importing / exporting and processing GPX, TCX, FIT and JSON files from services such as Strava, Movescount, Garmin, Polar etc

150 lines (149 loc) 6.71 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.GPXSampleMapper = void 0; const data_latitude_degrees_1 = require("../../../../data/data.latitude-degrees"); const data_altitude_1 = require("../../../../data/data.altitude"); const data_heart_rate_1 = require("../../../../data/data.heart-rate"); const data_cadence_1 = require("../../../../data/data.cadence"); const data_temperature_1 = require("../../../../data/data.temperature"); const data_distance_1 = require("../../../../data/data.distance"); const data_sea_level_pressure_1 = require("../../../../data/data.sea-level-pressure"); const data_speed_1 = require("../../../../data/data.speed"); const data_vertical_speed_1 = require("../../../../data/data.vertical-speed"); const data_power_1 = require("../../../../data/data.power"); const data_longitude_degrees_1 = require("../../../../data/data.longitude-degrees"); const helpers_1 = require("../../../utilities/helpers"); exports.GPXSampleMapper = [ { dataType: data_latitude_degrees_1.DataLatitudeDegrees.type, getSampleValue: sample => Number(sample.lat) }, { dataType: data_longitude_degrees_1.DataLongitudeDegrees.type, getSampleValue: sample => Number(sample.lon) }, { dataType: data_altitude_1.DataAltitude.type, getSampleValue: sample => (sample.ele ? Number(sample.ele[0]) : null) }, { dataType: data_heart_rate_1.DataHeartRate.type, getSampleValue: sample => { // debugger; if (!sample.extensions || !sample.extensions.length) { return null; } if (sample.extensions[0].heartrate && (0, helpers_1.isNumberOrString)(sample.extensions[0].heartrate[0])) { return Number(sample.extensions[0].heartrate[0]); } if (sample.extensions[0].TrackPointExtension && sample.extensions[0].TrackPointExtension[0] && sample.extensions[0].TrackPointExtension[0].hr) { return Number(sample.extensions[0].TrackPointExtension[0].hr[0]); } return null; } }, { dataType: data_cadence_1.DataCadence.type, getSampleValue: sample => { // debugger; if (!sample.extensions || !sample.extensions.length) { return null; } if (sample.extensions[0].cadence && (0, helpers_1.isNumberOrString)(sample.extensions[0].cadence[0])) { return Number(sample.extensions[0].cadence[0]); } if (sample.extensions[0].TrackPointExtension && sample.extensions[0].TrackPointExtension[0] && sample.extensions[0].TrackPointExtension[0].cad) { return Number(sample.extensions[0].TrackPointExtension[0].cad[0]); } return null; } }, { dataType: data_temperature_1.DataTemperature.type, getSampleValue: sample => { // debugger; if (!sample.extensions || !sample.extensions.length) { return null; } if (sample.extensions[0].temp && (0, helpers_1.isNumberOrString)(sample.extensions[0].temp[0])) { return Number(sample.extensions[0].temp[0]); } if (sample.extensions[0].TrackPointExtension && sample.extensions[0].TrackPointExtension[0] && sample.extensions[0].TrackPointExtension[0].atemp) { return Number(sample.extensions[0].TrackPointExtension[0].atemp[0]); } return null; } }, { dataType: data_distance_1.DataDistance.type, getSampleValue: sample => { // TODO(sports-lib): verify/normalize GPX extension distance units per vendor namespace so // Distance remains canonical and does not compete with later-derived unit streams. if (!sample.extensions || !sample.extensions.length) { return null; } if (sample.extensions[0].distance && (0, helpers_1.isNumberOrString)(sample.extensions[0].distance[0])) { return Number(sample.extensions[0].distance[0]); } return null; } }, { dataType: data_sea_level_pressure_1.DataSeaLevelPressure.type, getSampleValue: sample => { if (!sample.extensions || !sample.extensions.length) { return null; } if (sample.extensions[0].seaLevelPressure && (0, helpers_1.isNumberOrString)(sample.extensions[0].seaLevelPressure[0])) { return Number(sample.extensions[0].seaLevelPressure[0]); } return null; } }, { dataType: data_speed_1.DataSpeed.type, getSampleValue: sample => { // TODO(sports-lib): verify/normalize GPX extension speed units per vendor namespace so // Speed remains canonical and unit-variant generation stays deterministic. if (!sample.extensions || !sample.extensions.length) { return null; } if (sample.extensions[0].speed && (0, helpers_1.isNumberOrString)(sample.extensions[0].speed[0])) { return Number(sample.extensions[0].speed[0]); } return null; } }, { dataType: data_vertical_speed_1.DataVerticalSpeed.type, getSampleValue: sample => { if (!sample.extensions || !sample.extensions.length) { return null; } if (sample.extensions[0].verticalSpeed && (0, helpers_1.isNumberOrString)(sample.extensions[0].verticalSpeed[0])) { return Number(sample.extensions[0].verticalSpeed[0]); } return null; } }, { dataType: data_power_1.DataPower.type, getSampleValue: (sample, sampleInfo) => { var _a; let watts = null; if (((_a = sample.extensions) === null || _a === void 0 ? void 0 : _a.length) && sample.extensions[0].power && (0, helpers_1.isNumberOrString)(sample.extensions[0].power[0])) { watts = Number(sample.extensions[0].power[0]); } // Ensure power stream compliance when in some cases power sample field could be missing even if others samples have it // Just set watts to 0 when this happen // Case example: ride file "7555261629.gpx" from integration tests return (sampleInfo === null || sampleInfo === void 0 ? void 0 : sampleInfo.hasPowerMeter) ? watts || 0 : null; } } ];