UNPKG

workouts-transfer

Version:

Workouts transfer between services as inversify modules.

75 lines (74 loc) 2.63 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const luxon_1 = require("luxon"); // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore const xml2js_1 = __importDefault(require("xml2js")); const parser = new xml2js_1.default.Parser(); function parse(data) { return new Promise((resolve, reject) => { // eslint-disable-next-line promise/prefer-await-to-callbacks parser.parseString(data, (err, result) => { if (err) { reject(err); } resolve(result); }); }); } const gpxExtension = 'gpxtpx:TrackPointExtension'; const trackExtension = 'ns3:TrackPointExtension'; function getCadence(point) { const { extensions } = point; if (!extensions) { return; } if (extensions[0][trackExtension] && extensions[0][trackExtension][0]['ns3:cad']) { return Number(extensions[0][trackExtension][0]['ns3:cad'][0]); } if (extensions[0][gpxExtension] && extensions[0]['gpxtpx:TrackPointExtension'][0]['gpxtpx:cad']) { return Number(extensions[0][gpxExtension][0]['gpxtpx:cad'][0]); } } function getTemperature(point) { const { extensions } = point; if (!extensions) { return; } if (extensions[0][trackExtension] && extensions[0][trackExtension][0]['ns3:atemp']) { return Number(extensions[0][trackExtension][0]['ns3:atemp'][0]); } } function getHr(point) { const { extensions } = point; if (!extensions) { return; } if (extensions[0][gpxExtension] && extensions[0][gpxExtension][0]['gpxtpx:hr']) { return Number(extensions[0][gpxExtension][0]['gpxtpx:hr'][0]); } if (extensions[0][trackExtension] && extensions[0][trackExtension][0]['ns3:hr']) { return Number(extensions[0][trackExtension][0]['ns3:hr'][0]); } } async function gpx(data) { const parsedData = await parse(data); if (!parsedData.gpx.trk[0].trkseg[0].trkpt) { return null; } return parsedData.gpx.trk[0].trkseg[0].trkpt.map((point) => { return { time: luxon_1.DateTime.fromISO(point.time[0]), latitude: Number(point.$.lat), longitude: Number(point.$.lon), altitude: point.ele && point.ele[0] ? Number(point.ele[0]) : undefined, cadence: getCadence(point), hr: getHr(point), temperature: getTemperature(point), }; }); } exports.default = gpx;