@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
1,508 lines (1,491 loc) • 785 kB
JavaScript
// src/data/data.interface.ts
var UnitSystem = /* @__PURE__ */ ((UnitSystem2) => {
UnitSystem2[UnitSystem2["Metric"] = 0] = "Metric";
UnitSystem2[UnitSystem2["Imperial"] = 1] = "Imperial";
return UnitSystem2;
})(UnitSystem || {});
// src/events/utilities/helpers.ts
function isNumberOrString(property) {
return typeof property === "number" || typeof property === "string";
}
function isNumber(property) {
return typeof property === "number" && !isNaN(property);
}
function convertSpeedToPace(number) {
return number === 0 ? Infinity : 1e3 / number;
}
function convertSpeedToSwimPace(number) {
return number === 0 ? Infinity : 100 / number;
}
function convertSwimPaceToSpeed(number) {
return number === 0 ? Infinity : 100 / number;
}
function convertSpeedToSpeedInKilometersPerHour(number) {
return number * 3.6;
}
function convertSpeedToSpeedInMilesPerHour(number) {
return number * 2.237;
}
function convertSpeedToSpeedInFeetPerSecond(number) {
return number * 3.28084;
}
function convertSpeedToSpeedInMetersPerMinute(number) {
return number * 60;
}
function convertSpeedToSpeedInFeetPerMinute(number) {
return number * 196.85;
}
function convertSpeedToSpeedInFeetPerHour(number) {
return number * 11811.024;
}
function convertSpeedToSpeedInMetersPerHour(number) {
return number * 3600;
}
function convertSpeedToSpeedInKnots(number) {
return number * 1.943844;
}
function convertPaceToPaceInMinutesPerMile(number) {
return number * 1.60934;
}
function convertMetersToMiles(number) {
return number === 0 ? 0 : number / 1609;
}
function convertMetersToFeet(number) {
return number * 3.28084;
}
function convertSwimPaceToSwimPacePer100Yard(number) {
return number * 0.9144;
}
function getSize(obj) {
return getSizeWithOptionalFormat(obj, false);
}
function getSizeFormated(obj) {
return getSizeWithOptionalFormat(obj, true);
}
function getSizeWithOptionalFormat(obj, format = true) {
let size;
try {
size = new Blob([obj]).size;
} catch {
size = Buffer.from(obj).length;
}
function formatByteSize(bytes) {
if (bytes < 1024) {
return bytes + " bytes";
} else if (bytes < 1048576) {
return (bytes / 1024).toFixed(4) + " KiB";
} else if (bytes < 1073741824) {
return (bytes / 1048576).toFixed(4) + " MiB";
} else {
return (bytes / 1073741824).toFixed(4) + " GiB";
}
}
return format ? formatByteSize(size) : size;
}
function fillMissingValuesLinear(array) {
let i = 0, j, delta;
while (i < array.length) {
if (array[i] !== null) {
i++;
continue;
}
j = i;
while (array[++j] === null) {
}
delta = (array[j] - array[i - 1]) / (j - i + 1);
do {
array[i] = delta + array[i - 1];
i++;
} while (i < j);
}
return array;
}
var mean = (array) => {
return array.reduce((a, b) => a + b, 0) / array.length;
};
var meanWindowSmoothing = (array, windowSize = 7, roundDecimals = 3) => {
const roundDecimalsFactor = 10 ** roundDecimals;
return array.map((value, index) => {
const window = array.slice(index, index + windowSize);
return Math.round(mean(window) * roundDecimalsFactor) / roundDecimalsFactor;
});
};
var median = (inputArray) => {
const s = inputArray.slice().sort((a, b) => {
return a - b;
});
return s[Math.floor((s.length - 1) / 2)];
};
var medianFilter = (array, window = 11) => {
if (window % 2 === 0) {
throw new Error("Window size should be an odd number");
}
if (array.length < window) {
return array;
}
const f = [];
const w = [];
let i;
w.push(array[0]);
for (i = 0; i < array.length; i++) {
const midWindowIndex = Math.floor(window / 2);
if (array.length - 1 >= i + midWindowIndex) {
w.push(array[i + midWindowIndex]);
}
f.push(median(w));
if (i >= midWindowIndex) {
w.shift();
}
}
return f;
};
var standardDeviation = (stream) => {
const avg = mean(stream);
const variance = mean(stream.map((value) => Math.pow(value, 2))) - Math.pow(avg, 2);
return variance > 0 ? Math.sqrt(variance) : 0;
};
// src/data/data.ts
var Data = class {
static {
this.unitSystem = 0 /* Metric */;
}
constructor(value) {
if (!this.getType()) {
throw new Error("Type not set");
}
if (!this.isValueTypeValid(value)) {
throw new Error("Value is not boolean or number or string or Date or position");
}
this.value = value;
}
setValue(value) {
if (!this.isValueTypeValid(value)) {
throw new Error("Value is not boolean or number or string or Date or position");
}
this.value = value;
return this;
}
getValue(_formatForDataType) {
return this.value;
}
getDisplayValue() {
const value = this.getValue();
switch (typeof value) {
case "string":
case "number":
return value;
default:
return String(value);
}
}
getType() {
return this.constructor.type;
}
getUnit() {
return this.constructor.unit;
}
getDisplayUnit() {
return this.getUnit();
}
getDisplayType() {
return this.constructor.displayType || this.constructor.type;
}
getUnitSystem() {
return this.constructor.unitSystem;
}
isValueTypeValid(value) {
const position = value;
return !(typeof value !== "string" && typeof value !== "number" && typeof value !== "boolean" && !Array.isArray(value) && !isNumber(position?.latitudeDegrees) && !isNumber(position?.longitudeDegrees));
}
toJSON() {
return {
[this.getType()]: this.getValue()
};
}
};
// src/data/data.bare.ts
var DataBare = class extends Data {
static {
this.unit = "";
}
// Bare data have no unit but empty string
};
// src/data/data.number.ts
var DataNumber = class extends DataBare {
constructor(value) {
super(value);
this.value = value;
}
getValue(_formatForDataType) {
return this.value;
}
isValueTypeValid(value) {
return typeof value === "number";
}
};
// src/data/data.duration.ts
var DataDuration = class extends DataNumber {
static {
this.type = "Duration";
}
static {
this.unit = "s";
}
/**
* Converts to hhh:mmm:ss:ms
* @todo should adopt and round depending if needed to show seconds or not
* @param showDays
* @param showSeconds
* @param showMilliseconds
* @param useColonFormat when true, returns compact colon-separated format e.g. `1:04:32`
*/
getDisplayValue(showDays = false, showSeconds = true, showMilliseconds = false, useColonFormat = false) {
const seconds = this.getValue();
const h = Math.floor(seconds / 3600);
const d = Math.floor(h / 24);
const m = Math.floor(seconds % 3600 / 60);
const s = Math.floor(seconds % 3600 % 60);
const ms = (Math.round(seconds % 1 * 10) / 10).toString().substring(1);
if (useColonFormat) {
const msStr = showMilliseconds ? ms : "";
const ss = ("0" + s).slice(-2) + msStr;
const mm = ("0" + m).slice(-2);
return h > 0 ? `${h}:${mm}:${ss}` : `${mm}:${ss}`;
}
if (!m && !h) {
return showSeconds ? ("0" + s).slice(-2) + (showMilliseconds ? ms : "") + "s" : s + String(showMilliseconds ? ms : "") + `s`;
} else if (!h) {
return ("0" + m).slice(-2) + "m" + (showSeconds ? " " + ("0" + s).slice(-2) + (showMilliseconds ? ms : "") + "s" : ``);
} else {
if (d) {
if (showDays) {
return d + "d " + ("0" + (h - d * 24)).slice(-2) + "h " + ("0" + m).slice(-2) + "m " + (showSeconds ? ("0" + s).slice(-2) + (showMilliseconds ? ms : "") + "s" : ``);
}
return h + "h " + ("0" + m).slice(-2) + "m " + (showSeconds ? ("0" + s).slice(-2) + (showMilliseconds ? ms : "") + "s" : ``);
} else {
return ("0" + h).slice(-2) + "h " + ("0" + m).slice(-2) + "m " + (showSeconds ? ("0" + s).slice(-2) + (showMilliseconds ? ms : "") + "s" : ``);
}
}
}
/**
* Formats an elapsed duration as a stopwatch value, such as `1:36.12`.
*
* Uses a single minute digit for sub-hour durations, pads seconds to two
* digits, and retains trailing zeroes in the fractional part.
*/
getStopwatchDisplayValue(fractionDigits = 2) {
const boundedFractionDigits = Math.max(0, Math.min(3, Math.trunc(fractionDigits)));
const precision = 10 ** boundedFractionDigits;
const roundedSeconds = Math.round(this.getValue() * precision) / precision;
const h = Math.floor(roundedSeconds / 3600);
const m = Math.floor(roundedSeconds % 3600 / 60);
const s = Math.floor(roundedSeconds % 60);
const fractionalPart = boundedFractionDigits ? (roundedSeconds % 1).toFixed(boundedFractionDigits).substring(1) : "";
const seconds = `${("0" + s).slice(-2)}${fractionalPart}`;
return h > 0 ? `${h}:${("0" + m).slice(-2)}:${seconds}` : `${m}:${seconds}`;
}
getDisplayUnit() {
return "";
}
};
// src/data/data.pace.ts
var DataPace = class extends DataDuration {
static {
this.type = "Pace";
}
static {
this.unit = "min/km";
}
getDisplayValue() {
if (this.getValue() === Infinity || this.getValue() === -Infinity) {
return "00:00";
}
const d = this.getValue();
const h = Math.floor(d / 3600);
const m = Math.floor(d % 3600 / 60);
const s = Math.floor(d % 3600 % 60);
if (!m && !h) {
return "00:" + ("0" + s).slice(-2);
} else if (!h) {
return ("0" + m).slice(-2) + ":" + ("0" + s).slice(-2);
} else {
return ("0" + h).slice(-2) + ":" + ("0" + m).slice(-2) + ":" + ("0" + s).slice(-2);
}
}
getDisplayUnit() {
return this.getUnit();
}
getValue(formatForDataType) {
switch (formatForDataType) {
case DataPaceMinutesPerMile.type:
return convertPaceToPaceInMinutesPerMile(this.value);
default:
return super.getValue(formatForDataType);
}
}
};
var DataPaceMinutesPerMile = class extends DataPace {
static {
this.type = "Pace in minutes per mile";
}
static {
this.displayType = DataPace.type;
}
static {
this.unit = "min/m";
}
getValue(formatForDataType) {
if (formatForDataType) {
throw new Error(`Not implemented`);
}
return super.getValue(formatForDataType);
}
};
// src/data/data.swim-pace.ts
var DataSwimPace = class extends DataPace {
static {
this.type = "Swim Pace";
}
static {
this.unit = "min/100m";
}
getValue(formatForDataType) {
switch (formatForDataType) {
case DataSwimPaceMinutesPer100Yard.type:
return convertSwimPaceToSwimPacePer100Yard(this.value);
default:
return super.getValue(formatForDataType);
}
}
};
var DataSwimPaceMinutesPer100Yard = class extends DataSwimPace {
static {
this.type = "Swim Pace in minutes per 100 yard";
}
static {
this.displayType = DataSwimPace.type;
}
static {
this.unit = "min/100yd";
}
};
// src/data/data.speed.ts
var DataSpeed = class extends DataNumber {
static {
this.type = "Speed";
}
static {
this.unit = "m/s";
}
getDisplayValue() {
return this.getValue().toFixed(2);
}
getValue(formatForDataType) {
switch (formatForDataType) {
// Speed cases conversions
case DataSpeedKilometersPerHour.type:
return convertSpeedToSpeedInKilometersPerHour(this.value);
case DataSpeedMilesPerHour.type:
return convertSpeedToSpeedInMilesPerHour(this.value);
case DataSpeedFeetPerSecond.type:
return convertSpeedToSpeedInFeetPerSecond(this.value);
case DataSpeedMetersPerMinute.type:
return convertSpeedToSpeedInMetersPerMinute(this.value);
case DataSpeedFeetPerMinute.type:
return convertSpeedToSpeedInFeetPerMinute(this.value);
case DataSpeedKnots.type:
return convertSpeedToSpeedInKnots(this.value);
// Pace
case DataPace.type:
return convertSpeedToPace(this.value);
case DataPaceMinutesPerMile.type:
return convertPaceToPaceInMinutesPerMile(convertSpeedToPace(this.value));
// Swim pace
case DataSwimPace.type:
return convertSpeedToSwimPace(this.value);
case DataSwimPaceMinutesPer100Yard.type:
return convertSwimPaceToSwimPacePer100Yard(convertSpeedToSwimPace(this.value));
default:
return super.getValue(formatForDataType);
}
}
};
var DataSpeedKilometersPerHour = class extends DataSpeed {
static {
this.type = "Speed in kilometers per hour";
}
static {
this.displayType = DataSpeed.type;
}
static {
this.unit = "km/h";
}
getDisplayType() {
return super.getDisplayType();
}
};
var DataSpeedMilesPerHour = class extends DataSpeed {
static {
this.type = "Speed in miles per hour";
}
static {
this.displayType = DataSpeed.type;
}
static {
this.unit = "mph";
}
getDisplayType() {
return super.getDisplayType();
}
};
var DataSpeedFeetPerSecond = class extends DataSpeed {
static {
this.type = "Speed in feet per second";
}
static {
this.displayType = DataSpeed.type;
}
static {
this.unit = "ft/s";
}
getDisplayType() {
return super.getDisplayType();
}
};
var DataSpeedMetersPerMinute = class extends DataSpeed {
static {
this.type = "Speed in meters per minute";
}
static {
this.displayType = DataSpeed.type;
}
static {
this.unit = "m/min";
}
getDisplayType() {
return super.getDisplayType();
}
};
var DataSpeedFeetPerMinute = class extends DataSpeed {
static {
this.type = "Speed in feet per minute";
}
static {
this.displayType = DataSpeed.type;
}
static {
this.unit = "ft/min";
}
getDisplayType() {
return super.getDisplayType();
}
};
var DataSpeedKnots = class extends DataSpeed {
static {
this.type = "Speed in knots";
}
static {
this.displayType = DataSpeed.type;
}
static {
this.unit = "kn";
}
getDisplayType() {
return super.getDisplayType();
}
};
// src/data/data.speed-avg.ts
var DataSpeedAvg = class extends DataSpeed {
static {
this.type = "Average Speed";
}
};
var DataSpeedAvgKilometersPerHour = class extends DataSpeedKilometersPerHour {
static {
this.type = "Average speed in kilometers per hour";
}
static {
this.displayType = DataSpeedAvg.type;
}
getDisplayType() {
return super.getDisplayType();
}
};
var DataSpeedAvgMilesPerHour = class extends DataSpeedMilesPerHour {
static {
this.type = "Average speed in miles per hour";
}
static {
this.displayType = DataSpeedAvg.type;
}
getDisplayType() {
return super.getDisplayType();
}
};
var DataSpeedAvgFeetPerSecond = class extends DataSpeedFeetPerSecond {
static {
this.type = "Average speed in feet per second";
}
static {
this.displayType = DataSpeedAvg.type;
}
getDisplayType() {
return super.getDisplayType();
}
};
var DataSpeedAvgMetersPerMinute = class extends DataSpeedMetersPerMinute {
static {
this.type = "Average speed in meters per minute";
}
static {
this.displayType = DataSpeedAvg.type;
}
getDisplayType() {
return super.getDisplayType();
}
};
var DataSpeedAvgFeetPerMinute = class extends DataSpeedFeetPerMinute {
static {
this.type = "Average speed in feet per minute";
}
static {
this.displayType = DataSpeedAvg.type;
}
getDisplayType() {
return super.getDisplayType();
}
};
var DataSpeedAvgKnots = class extends DataSpeedKnots {
static {
this.type = "Average speed in knots";
}
static {
this.displayType = DataSpeedAvg.type;
}
getDisplayType() {
return super.getDisplayType();
}
};
// src/data/data.pace-avg.ts
var DataPaceAvg = class extends DataPace {
static {
this.type = "Average Pace";
}
};
var DataPaceAvgMinutesPerMile = class extends DataPaceMinutesPerMile {
static {
this.type = "Average pace in minutes per mile";
}
static {
this.displayType = DataPaceAvg.type;
}
};
// src/data/data.swim-pace-avg.ts
var DataSwimPaceAvg = class extends DataSwimPace {
static {
this.type = "Average Swim Pace";
}
};
var DataSwimPaceAvgMinutesPer100Yard = class extends DataSwimPaceMinutesPer100Yard {
static {
this.type = "Average swim pace in minutes per 100 yard";
}
static {
this.displayType = DataSwimPaceAvg.type;
}
};
// src/data/data.grade-adjusted-pace.ts
var DataGradeAdjustedPace = class extends DataPace {
static {
this.type = "Grade Adjusted Pace";
}
static {
this.unit = "min/km";
}
getValue(formatForDataType) {
switch (formatForDataType) {
case DataGradeAdjustedPaceMinutesPerMile.type:
return convertPaceToPaceInMinutesPerMile(this.value);
default:
return super.getValue(formatForDataType);
}
}
};
var DataGradeAdjustedPaceMinutesPerMile = class extends DataGradeAdjustedPace {
static {
this.type = "Grade Adjusted Pace in minutes per mile";
}
static {
this.displayType = DataGradeAdjustedPace.type;
}
static {
this.unit = "min/m";
}
getValue(formatForDataType) {
if (formatForDataType) {
throw new Error(`Not implemented`);
}
return super.getValue(formatForDataType);
}
};
// src/data/data.grade-adjusted-pace-avg.ts
var DataGradeAdjustedPaceAvg = class extends DataGradeAdjustedPace {
static {
this.type = "Average Grade Adjusted Pace";
}
};
var DataGradeAdjustedPaceAvgMinutesPerMile = class extends DataGradeAdjustedPaceMinutesPerMile {
static {
this.type = "Average Grade Adjusted Pace in minutes per mile";
}
static {
this.displayType = DataGradeAdjustedPaceAvg.type;
}
static {
this.unit = "min/m";
}
getValue(formatForDataType) {
if (formatForDataType) {
throw new Error(`Not implemented`);
}
return super.getValue(formatForDataType);
}
};
// src/data/data.grade-adjusted-speed.ts
var DataGradeAdjustedSpeed = class extends DataSpeed {
static {
this.type = "Grade Adjusted Speed";
}
getValue(formatForDataType) {
switch (formatForDataType) {
// Speed cases conversions
case DataGradeAdjustedSpeedKilometersPerHour.type:
return convertSpeedToSpeedInKilometersPerHour(this.value);
case DataGradeAdjustedSpeedMilesPerHour.type:
return convertSpeedToSpeedInMilesPerHour(this.value);
case DataGradeAdjustedSpeedFeetPerSecond.type:
return convertSpeedToSpeedInFeetPerSecond(this.value);
case DataGradeAdjustedSpeedMetersPerMinute.type:
return convertSpeedToSpeedInMetersPerMinute(this.value);
case DataGradeAdjustedSpeedFeetPerMinute.type:
return convertSpeedToSpeedInFeetPerMinute(this.value);
case DataGradeAdjustedSpeedKnots.type:
return convertSpeedToSpeedInKnots(this.value);
// Pace
case DataGradeAdjustedPace.type:
return convertSpeedToPace(this.value);
case DataGradeAdjustedPaceMinutesPerMile.type:
return convertPaceToPaceInMinutesPerMile(convertSpeedToPace(this.value));
default:
return super.getValue(formatForDataType);
}
}
};
var DataGradeAdjustedSpeedKilometersPerHour = class extends DataGradeAdjustedSpeed {
static {
this.type = "Grade Adjusted Speed in kilometers per hour";
}
static {
this.displayType = DataGradeAdjustedSpeed.type;
}
static {
this.unit = "km/h";
}
getDisplayType() {
return super.getDisplayType();
}
};
var DataGradeAdjustedSpeedMilesPerHour = class extends DataGradeAdjustedSpeed {
static {
this.type = "Grade Adjusted Speed in miles per hour";
}
static {
this.displayType = DataGradeAdjustedSpeed.type;
}
static {
this.unit = "mph";
}
getDisplayType() {
return super.getDisplayType();
}
};
var DataGradeAdjustedSpeedFeetPerSecond = class extends DataGradeAdjustedSpeed {
static {
this.type = "Grade Adjusted Speed in feet per second";
}
static {
this.displayType = DataGradeAdjustedSpeed.type;
}
static {
this.unit = "ft/s";
}
getDisplayType() {
return super.getDisplayType();
}
};
var DataGradeAdjustedSpeedMetersPerMinute = class extends DataGradeAdjustedSpeed {
static {
this.type = "Grade Adjusted Speed in meters per minute";
}
static {
this.displayType = DataGradeAdjustedSpeed.type;
}
static {
this.unit = "m/min";
}
getDisplayType() {
return super.getDisplayType();
}
};
var DataGradeAdjustedSpeedFeetPerMinute = class extends DataGradeAdjustedSpeed {
static {
this.type = "Grade Adjusted Speed in feet per minute";
}
static {
this.displayType = DataGradeAdjustedSpeed.type;
}
static {
this.unit = "ft/min";
}
getDisplayType() {
return super.getDisplayType();
}
};
var DataGradeAdjustedSpeedKnots = class extends DataGradeAdjustedSpeed {
static {
this.type = "Grade Adjusted Speed in knots";
}
static {
this.displayType = DataGradeAdjustedSpeed.type;
}
static {
this.unit = "kn";
}
getDisplayType() {
return super.getDisplayType();
}
};
// src/data/data.grade-adjusted-speed-avg.ts
var DataGradeAdjustedSpeedAvg = class extends DataGradeAdjustedSpeed {
static {
this.type = "Average Grade Adjusted Speed";
}
};
var DataGradeAdjustedSpeedAvgKilometersPerHour = class extends DataGradeAdjustedSpeedKilometersPerHour {
static {
this.type = "Average Grade Adjusted Speed in kilometers per hour";
}
static {
this.displayType = DataGradeAdjustedSpeedAvg.type;
}
getDisplayType() {
return super.getDisplayType();
}
};
var DataGradeAdjustedSpeedAvgMilesPerHour = class extends DataGradeAdjustedSpeedMilesPerHour {
static {
this.type = "Average Grade Adjusted Speed in miles per hour";
}
static {
this.displayType = DataGradeAdjustedSpeedAvg.type;
}
getDisplayType() {
return super.getDisplayType();
}
};
var DataGradeAdjustedSpeedAvgFeetPerSecond = class extends DataGradeAdjustedSpeedFeetPerSecond {
static {
this.type = "Average Grade Adjusted Speed in feet per second";
}
static {
this.displayType = DataGradeAdjustedSpeedAvg.type;
}
getDisplayType() {
return super.getDisplayType();
}
};
var DataGradeAdjustedSpeedAvgMetersPerMinute = class extends DataGradeAdjustedSpeedMetersPerMinute {
static {
this.type = "Average Grade Adjusted Speed in meters per minute";
}
static {
this.displayType = DataGradeAdjustedSpeedAvg.type;
}
getDisplayType() {
return super.getDisplayType();
}
};
var DataGradeAdjustedSpeedAvgFeetPerMinute = class extends DataGradeAdjustedSpeedFeetPerMinute {
static {
this.type = "Average Grade Adjusted Speed in feet per minute";
}
static {
this.displayType = DataGradeAdjustedSpeedAvg.type;
}
getDisplayType() {
return super.getDisplayType();
}
};
var DataGradeAdjustedSpeedAvgKnots = class extends DataGradeAdjustedSpeedKnots {
static {
this.type = "Average Grade Adjusted Speed in knots";
}
static {
this.displayType = DataGradeAdjustedSpeedAvg.type;
}
getDisplayType() {
return super.getDisplayType();
}
};
// src/data/data.vertical-speed.ts
var DataVerticalSpeed = class extends DataNumber {
static {
this.type = "Vertical Speed";
}
static {
this.unit = "m/s";
}
getValue(formatForDataType) {
switch (formatForDataType) {
case DataVerticalSpeedKilometerPerHour.type:
return convertSpeedToSpeedInKilometersPerHour(this.value);
case DataVerticalSpeedMilesPerHour.type:
return convertSpeedToSpeedInMilesPerHour(this.value);
case DataVerticalSpeedFeetPerSecond.type:
return convertSpeedToSpeedInFeetPerSecond(this.value);
case DataVerticalSpeedMetersPerMinute.type:
return convertSpeedToSpeedInMetersPerMinute(this.value);
case DataVerticalSpeedFeetPerMinute.type:
return convertSpeedToSpeedInFeetPerMinute(this.value);
case DataVerticalSpeedFeetPerHour.type:
return convertSpeedToSpeedInFeetPerHour(this.value);
case DataVerticalSpeedMetersPerHour.type:
return convertSpeedToSpeedInMetersPerHour(this.value);
default:
return super.getValue(formatForDataType);
}
}
getDisplayValue() {
return this.getValue().toFixed(2);
}
};
var DataVerticalSpeedFeetPerSecond = class extends DataVerticalSpeed {
static {
this.type = "Vertical speed in feet per second";
}
static {
this.displayType = DataVerticalSpeed.type;
}
static {
this.unit = "ft/s";
}
getDisplayType() {
return super.getDisplayType();
}
};
var DataVerticalSpeedMetersPerMinute = class extends DataVerticalSpeed {
static {
this.type = "Vertical speed in meters per minute";
}
static {
this.displayType = DataVerticalSpeed.type;
}
static {
this.unit = "m/min";
}
getDisplayType() {
return super.getDisplayType();
}
getDisplayValue() {
return this.getValue().toFixed(1);
}
};
var DataVerticalSpeedFeetPerMinute = class extends DataVerticalSpeed {
static {
this.type = "Vertical speed in feet per minute";
}
static {
this.displayType = DataVerticalSpeed.type;
}
static {
this.unit = "ft/min";
}
getDisplayType() {
return super.getDisplayType();
}
getDisplayValue() {
return this.getValue().toFixed(1);
}
};
var DataVerticalSpeedMetersPerHour = class extends DataVerticalSpeed {
static {
this.type = "Vertical speed in meters per hour";
}
static {
this.displayType = DataVerticalSpeed.type;
}
static {
this.unit = "m/h";
}
getDisplayType() {
return super.getDisplayType();
}
getDisplayValue() {
return this.getValue().toFixed(0);
}
};
var DataVerticalSpeedFeetPerHour = class extends DataVerticalSpeed {
static {
this.type = "Vertical speed in feet per hour";
}
static {
this.displayType = DataVerticalSpeed.type;
}
static {
this.unit = "ft/h";
}
getDisplayType() {
return super.getDisplayType();
}
getDisplayValue() {
return this.getValue().toFixed(0);
}
};
var DataVerticalSpeedKilometerPerHour = class extends DataVerticalSpeed {
static {
this.type = "Vertical speed in kilometers per hour";
}
static {
this.displayType = DataVerticalSpeed.type;
}
static {
this.unit = "km/h";
}
getDisplayType() {
return super.getDisplayType();
}
getDisplayValue() {
return this.getValue().toFixed(2);
}
};
var DataVerticalSpeedMilesPerHour = class extends DataVerticalSpeed {
static {
this.type = "Vertical speed in miles per hour";
}
static {
this.displayType = DataVerticalSpeed.type;
}
static {
this.unit = "mph";
}
getDisplayType() {
return super.getDisplayType();
}
getDisplayValue() {
return this.getValue().toFixed(2);
}
};
// src/activities/activity.types.ts
var ActivityTypesHelper = class _ActivityTypesHelper {
static normalizeActivityTypeLookupKey(value) {
return value.toLowerCase().replace(/[\s_-]/g, "");
}
static resolveActivityType(value) {
if (value === null || value === void 0) {
return null;
}
const raw = String(value).trim();
if (!raw) {
return null;
}
const exactMatch = ActivityTypes[raw];
if (exactMatch) {
return exactMatch;
}
const normalizedRaw = this.normalizeActivityTypeLookupKey(raw);
for (const enumKey of Object.keys(ActivityTypes)) {
if (this.normalizeActivityTypeLookupKey(enumKey) === normalizedRaw) {
return ActivityTypes[enumKey];
}
}
for (const enumValue of Object.values(ActivityTypes)) {
if (this.normalizeActivityTypeLookupKey(enumValue) === normalizedRaw) {
return enumValue;
}
}
return null;
}
static getActivityTypesAsUniqueArray() {
return Array.from(
new Set(
Object.keys(ActivityTypes).reduce((array, key) => {
array.push(ActivityTypes[key]);
return array;
}, [])
)
).sort((left, right) => {
if (left < right) {
return -1;
}
if (left > right) {
return 1;
}
return 0;
});
}
static getActivityTypeGroupsAsUniqueArray() {
const activityTypeGroups = Array.from(
new Set(Object.values(ActivityTypeGroups))
);
return activityTypeGroups.sort((left, right) => {
if (left < right) {
return -1;
}
if (left > right) {
return 1;
}
return 0;
});
}
static getActivityTypesForActivityGroup(activityTypeGroup) {
return [...ActivityTypesGroupMapping.map[activityTypeGroup] || []];
}
static averageSpeedDerivedDataTypesToUseForActivityType(activityType) {
switch (_ActivityTypesHelper.getActivityGroupForActivityType(activityType)) {
case ActivityTypeGroups.RunningGroup:
return [DataPaceAvg.type, DataGradeAdjustedPaceAvg.type];
case ActivityTypeGroups.TrailRunningGroup:
return [DataPaceAvg.type, DataGradeAdjustedPaceAvg.type, DataSpeedAvg.type, DataGradeAdjustedSpeedAvg.type];
case ActivityTypeGroups.OutdoorAdventuresGroup:
return [DataPaceAvg.type, DataSpeedAvg.type];
case ActivityTypeGroups.WaterSportsGroup:
case ActivityTypeGroups.SwimmingGroup:
return [DataSpeedAvg.type, DataSwimPaceAvg.type];
default:
return [DataSpeedAvg.type];
}
}
static speedDerivedDataTypesToUseForActivityType(activityType) {
switch (_ActivityTypesHelper.getActivityGroupForActivityType(activityType)) {
case ActivityTypeGroups.RunningGroup:
return [DataPace.type, DataSpeed.type];
case ActivityTypeGroups.TrailRunningGroup:
return [DataPace.type, DataSpeed.type];
case ActivityTypeGroups.OutdoorAdventuresGroup:
return [DataPace.type, DataSpeed.type];
case ActivityTypeGroups.WaterSportsGroup:
case ActivityTypeGroups.SwimmingGroup:
return [DataSpeed.type, DataSwimPace.type];
default:
return [DataSpeed.type];
}
}
static altiDistanceSpeedDerivedDataTypesToUseForActivityType(activityType) {
switch (_ActivityTypesHelper.getActivityGroupForActivityType(activityType)) {
case ActivityTypeGroups.RunningGroup:
return [DataGradeAdjustedPace.type];
case ActivityTypeGroups.TrailRunningGroup:
return [DataGradeAdjustedPace.type, DataGradeAdjustedSpeed.type];
default:
return [];
}
}
static verticalSpeedDerivedDataTypesToUseForActivityType(activityType) {
switch (_ActivityTypesHelper.getActivityGroupForActivityType(activityType)) {
case ActivityTypeGroups.RunningGroup:
case ActivityTypeGroups.TrailRunningGroup:
case ActivityTypeGroups.CyclingGroup:
case ActivityTypeGroups.MountainBikingGroup:
case ActivityTypeGroups.OutdoorAdventuresGroup:
case ActivityTypeGroups.PerformanceGroup:
return [DataVerticalSpeed.type];
default:
return [];
}
}
/**
* Identifies activities where ascent should be ignored/excluded (e.g. assisted ascent)
* @param activityType
*/
static shouldExcludeDescent(activityType) {
return ACTIVITIES_EXCLUDED_FROM_DESCENT.includes(activityType);
}
static shouldExcludeAscent(activityType) {
return ACTIVITIES_EXCLUDED_FROM_ASCENT.includes(activityType);
}
/**
* Returns metric display families that consumers may hide by default for a given activity type.
* This is a presentation hint only and must not be used to suppress imported/raw metrics.
*/
static hiddenDisplayDataTypesToUseForActivityType(activityType) {
if (ACTIVITIES_WITH_SPEED_METRICS_HIDDEN_BY_DEFAULT.includes(activityType)) {
return [DataSpeed.type, DataPace.type];
}
return [];
}
/**
* Get's back the activity group an activity belongs to or returns unspecified activity group
* @param activityType
* This function can also be called: Fighting with a non functional language
*/
static getActivityGroupForActivityType(activityType) {
return Object.entries(ActivityTypesGroupMapping.map).find(([, activityTypes]) => activityTypes.includes(activityType))?.[0] || ActivityTypeGroups.UnspecifiedGroup;
}
static isIndoorActivityType(activityType) {
return EXPLICIT_INDOOR_ACTIVITY_TYPES.includes(activityType);
}
};
var ActivityTypes = /* @__PURE__ */ ((ActivityTypes3) => {
ActivityTypes3["unknown"] = "Unknown Sport";
ActivityTypes3["Unknown sport"] = "Unknown Sport";
ActivityTypes3["Unknown Sport"] = "Unknown Sport";
ActivityTypes3["UnknownSport"] = "Unknown Sport";
ActivityTypes3["undefined"] = "Unknown Sport";
ActivityTypes3["Not specified sport"] = "Unknown Sport";
ActivityTypes3["Other"] = "Other";
ActivityTypes3["generic"] = "Generic";
ActivityTypes3["hiit"] = "HIIT";
ActivityTypes3["HIIT"] = "HIIT";
ActivityTypes3["generic_exercise"] = "Generic";
ActivityTypes3["generic_track_me"] = "Generic";
ActivityTypes3["Generic"] = "Generic";
ActivityTypes3["transition"] = "Transition";
ActivityTypes3["Transition"] = "Transition";
ActivityTypes3["fitness_equipment"] = "Fitness Equipment";
ActivityTypes3["Fitness Equipment"] = "Fitness Equipment";
ActivityTypes3["FitnessEquipment"] = "Fitness Equipment";
ActivityTypes3["Multisport"] = "Multisport";
ActivityTypes3["MultiSport"] = "Multisport";
ActivityTypes3["multisport"] = "Multisport";
ActivityTypes3["running_virtual_activity"] = "Virtual Running";
ActivityTypes3["VirtualRun"] = "Virtual Running";
ActivityTypes3["Virtual running"] = "Virtual Running";
ActivityTypes3["Virtual Running"] = "Virtual Running";
ActivityTypes3["VirtualRunning"] = "Virtual Running";
ActivityTypes3["Run"] = "Running";
ActivityTypes3["run"] = "Running";
ActivityTypes3["running_track"] = "Running";
ActivityTypes3["running_trail"] = "Trail Running";
ActivityTypes3["Running"] = "Running";
ActivityTypes3["running"] = "Running";
ActivityTypes3["running_street"] = "Running";
ActivityTypes3["running_road"] = "Running";
ActivityTypes3["TrailRunning"] = "Trail Running";
ActivityTypes3["Trail Running"] = "Trail Running";
ActivityTypes3["Trail running"] = "Trail Running";
ActivityTypes3["trail_running"] = "Trail Running";
ActivityTypes3["Indoor running"] = "Indoor Running";
ActivityTypes3["Indoor Running"] = "Indoor Running";
ActivityTypes3["IndoorRunning"] = "Indoor Running";
ActivityTypes3["running_indoor"] = "Indoor Running";
ActivityTypes3["running_indoor_running"] = "Indoor Running";
ActivityTypes3["training_indoor_running"] = "Indoor Running";
ActivityTypes3["Cycling"] = "Cycling";
ActivityTypes3["cycling"] = "Cycling";
ActivityTypes3["cycling_road"] = "Cycling";
ActivityTypes3["road_biking"] = "Cycling";
ActivityTypes3["cycling_track_cycling"] = "Cycling";
ActivityTypes3["cycling_gravel_cycling"] = "Cycling";
ActivityTypes3["Biking"] = "Cycling";
ActivityTypes3["biking"] = "Cycling";
ActivityTypes3["Ride"] = "Cycling";
ActivityTypes3["cycling_commuting"] = "Cycling";
ActivityTypes3["cycling_mixed_surface"] = "Cycling";
ActivityTypes3["cycling_indoor_cycling"] = "Indoor Cycling";
ActivityTypes3["Indoorcycling"] = "Indoor Cycling";
ActivityTypes3["indoor_cycling"] = "Indoor Cycling";
ActivityTypes3["Indoor cycling"] = "Indoor Cycling";
ActivityTypes3["IndoorCycling"] = "Indoor Cycling";
ActivityTypes3["Indoor Cycling"] = "Indoor Cycling";
ActivityTypes3["cycling_virtual_activity"] = "Virtual Cycling";
ActivityTypes3["VirtualRide"] = "Virtual Cycling";
ActivityTypes3["Virtual Cycling"] = "Virtual Cycling";
ActivityTypes3["VirtualCycling"] = "Virtual Cycling";
ActivityTypes3["e_biking"] = "E-Biking";
ActivityTypes3["E Biking"] = "E-Biking";
ActivityTypes3["EBiking"] = "E-Biking";
ActivityTypes3["E biking"] = "E-Biking";
ActivityTypes3["EBikeRide"] = "E-Biking";
ActivityTypes3["E-Biking"] = "E-Biking";
ActivityTypes3["cycling_mountain"] = "Mountain Biking";
ActivityTypes3["MountainBiking"] = "Mountain Biking";
ActivityTypes3["Mountain Biking"] = "Mountain Biking";
ActivityTypes3["cycling_cyclocross"] = "Mountain Biking";
ActivityTypes3["mountain"] = "Mountain Biking";
ActivityTypes3["Mountain biking"] = "Mountain Biking";
ActivityTypes3["cycling_mountain_enduro"] = "Enduro MTB";
ActivityTypes3["Enduro MTB"] = "Enduro MTB";
ActivityTypes3["cycling_downhill"] = "Downhill Cycling";
ActivityTypes3["cycling_mountain_downhill"] = "Downhill Cycling";
ActivityTypes3["DownhillCycling"] = "Downhill Cycling";
ActivityTypes3["Downhill Cycling"] = "Downhill Cycling";
ActivityTypes3["motorcycling"] = "Motorcycling";
ActivityTypes3["Motorcycling"] = "Motorcycling";
ActivityTypes3["boating"] = "Boating";
ActivityTypes3["Boating"] = "Boating";
ActivityTypes3["driving"] = "Driving";
ActivityTypes3["Driving"] = "Driving";
ActivityTypes3["Circuit training"] = "Circuit Training";
ActivityTypes3["Circuit Training"] = "Circuit Training";
ActivityTypes3["Swimming"] = "Swimming";
ActivityTypes3["swimming"] = "Swimming";
ActivityTypes3["Swim"] = "Swimming";
ActivityTypes3["swim"] = "Swimming";
ActivityTypes3["swimming_lap_swimming"] = "Swimming";
ActivityTypes3["swimming_open_water"] = "Open Water Swimming";
ActivityTypes3["Open water swimming"] = "Open Water Swimming";
ActivityTypes3["open water swimming"] = "Open Water Swimming";
ActivityTypes3["Open Water Swimming"] = "Open Water Swimming";
ActivityTypes3["OpenWaterSwimming"] = "Open Water Swimming";
ActivityTypes3["open_water"] = "Open Water Swimming";
ActivityTypes3["basketball"] = "Basketball";
ActivityTypes3["soccer"] = "Soccer";
ActivityTypes3["Soccer"] = "Soccer";
ActivityTypes3["american_football"] = "American Football";
ActivityTypes3["American footBall"] = "American Football";
ActivityTypes3["American Football"] = "American Football";
ActivityTypes3["AmericanFootball"] = "American Football";
ActivityTypes3["Skating"] = "Skating";
ActivityTypes3["Aerobics"] = "Aerobics";
ActivityTypes3["training_yoga"] = "Yoga";
ActivityTypes3["yoga"] = "Yoga";
ActivityTypes3["Yoga"] = "Yoga";
ActivityTypes3["YogaPilates"] = "Yoga";
ActivityTypes3["fitness_equipment_pilates"] = "Pilates";
ActivityTypes3["Pilates"] = "Pilates";
ActivityTypes3["pilates"] = "Pilates";
ActivityTypes3["Trekking"] = "Trekking";
ActivityTypes3["Trek"] = "Trekking";
ActivityTypes3["Walking"] = "Walking";
ActivityTypes3["walking"] = "Walking";
ActivityTypes3["walking_indoor"] = "Walking";
ActivityTypes3["Walk"] = "Walking";
ActivityTypes3["walk"] = "Walking";
ActivityTypes3["walking_casual_walking"] = "Walking";
ActivityTypes3["walking_indoor_walking"] = "Walking";
ActivityTypes3["Sailing"] = "Sailing";
ActivityTypes3["sailing"] = "Sailing";
ActivityTypes3["Kayaking"] = "Kayaking";
ActivityTypes3["kayaking"] = "Kayaking";
ActivityTypes3["rafting"] = "Rafting";
ActivityTypes3["Rafting"] = "Rafting";
ActivityTypes3["rowing"] = "Rowing";
ActivityTypes3["Rowing"] = "Rowing";
ActivityTypes3["fitness_equipment_indoor_rowing"] = "Indoor Rowing";
ActivityTypes3["IndoorRowing"] = "Indoor Rowing";
ActivityTypes3["Indoor Rowing"] = "Indoor Rowing";
ActivityTypes3["indoor_rowing"] = "Indoor Rowing";
ActivityTypes3["rowing_indoor"] = "Indoor Rowing";
ActivityTypes3["rowing_indoor_rowing"] = "Indoor Rowing";
ActivityTypes3["Climbing"] = "Climbing";
ActivityTypes3["Triathlon"] = "Triathlon";
ActivityTypes3["Duathlon"] = "Duathlon";
ActivityTypes3["Aquathlon"] = "Aquathlon";
ActivityTypes3["Alpine skiing"] = "Alpine Skiing";
ActivityTypes3["Alpine Skiing"] = "Alpine Skiing";
ActivityTypes3["AlpineSkiing"] = "Alpine Skiing";
ActivityTypes3["alpine_skiing"] = "Alpine Skiing";
ActivityTypes3["AlpineSki"] = "Alpine Skiing";
ActivityTypes3["downhill"] = "Alpine Skiing";
ActivityTypes3["Downhill skiing"] = "Alpine Skiing";
ActivityTypes3["DownhillSkiing"] = "Alpine Skiing";
ActivityTypes3["Crosscountry Skiing"] = "Crosscountry Skiing";
ActivityTypes3["Crosscountry skiing"] = "Crosscountry Skiing";
ActivityTypes3["CrosscountrySkiing"] = "Crosscountry Skiing";
ActivityTypes3["CrossCountrySkiing"] = "Crosscountry Skiing";
ActivityTypes3["cross_country_skiing"] = "Crosscountry Skiing";
ActivityTypes3["cross_country_skiing_skate_skiing"] = "Crosscountry Skiing";
ActivityTypes3["NordicSki"] = "Nordic Skiing";
ActivityTypes3["Nordic skiing"] = "Nordic Skiing";
ActivityTypes3["Nordic Skiing"] = "Nordic Skiing";
ActivityTypes3["Backcountry skiing"] = "Backcountry Skiing";
ActivityTypes3["Backcountry Skiing"] = "Backcountry Skiing";
ActivityTypes3["BackCountrySkiing"] = "Backcountry Skiing";
ActivityTypes3["BackcountrySkiing"] = "Backcountry Skiing";
ActivityTypes3["BackcountrySki"] = "Backcountry Skiing";
ActivityTypes3["cross_country_skiing_backcountry"] = "Backcountry Skiing";
ActivityTypes3["alpine_skiing_backcountry"] = "Backcountry Skiing";
ActivityTypes3["backcountry"] = "Backcountry Skiing";
ActivityTypes3["BackCountrySki"] = "Backcountry Skiing";
ActivityTypes3["Ski Touring"] = "Ski Touring";
ActivityTypes3["SkiTouring"] = "Ski Touring";
ActivityTypes3["Telemark skiing"] = "Telemark Skiing";
ActivityTypes3["TelemarkSkiing"] = "Telemark Skiing";
ActivityTypes3["Telemark Skiing"] = "Telemark Skiing";
ActivityTypes3["cross_country_skiing_downhill"] = "Telemark Skiing";
ActivityTypes3["alpine_skiing_downhill"] = "Alpine Skiing";
ActivityTypes3["Roller skiing"] = "Roller Skiing";
ActivityTypes3["RollerSki"] = "Roller Skiing";
ActivityTypes3["Roller Skiing"] = "Roller Skiing";
ActivityTypes3["Snowboarding"] = "Snowboarding";
ActivityTypes3["snowboarding"] = "Snowboarding";
ActivityTypes3["Snowboard"] = "Snowboarding";
ActivityTypes3["Weight Training"] = "Weight Training";
ActivityTypes3["Weight training"] = "Weight Training";
ActivityTypes3["WeightTraining"] = "Weight Training";
ActivityTypes3["Basketball"] = "Basketball";
ActivityTypes3["Ice Hockey"] = "Ice Hockey";
ActivityTypes3["IceHockey"] = "Ice Hockey";
ActivityTypes3["Volleyball"] = "Volleyball";
ActivityTypes3["Football"] = "Football";
ActivityTypes3["Softball"] = "Softball";
ActivityTypes3["Handball"] = "Handball";
ActivityTypes3["Cheerleading"] = "Cheerleading";
ActivityTypes3["Baseball"] = "Baseball";
ActivityTypes3["tennis"] = "Tennis";
ActivityTypes3["Tennis"] = "Tennis";
ActivityTypes3["tennis_match"] = "Tennis";
ActivityTypes3["Badminton"] = "Badminton";
ActivityTypes3["Table tennis"] = "Table Tennis";
ActivityTypes3["Table Tennis"] = "Table Tennis";
ActivityTypes3["TableTennis"] = "Table Tennis";
ActivityTypes3["racket"] = "Racquet Ball";
ActivityTypes3["racquet_ball"] = "Racquet Ball";
ActivityTypes3["Racquet Ball"] = "Racquet Ball";
ActivityTypes3["RacquetBall"] = "Racquet Ball";
ActivityTypes3["Racquet ball"] = "Racquet Ball";
ActivityTypes3["Squash"] = "Squash";
ActivityTypes3["Combat sport"] = "Combat";
ActivityTypes3["Combat"] = "Combat";
ActivityTypes3["Boxing"] = "Boxing";
ActivityTypes3["Floorball"] = "Floorball";
ActivityTypes3["Scuba diving"] = "Scuba Diving";
ActivityTypes3["Scuba Diving"] = "Scuba Diving";
ActivityTypes3["ScubaDiving"] = "Scuba Diving";
ActivityTypes3["Free diving"] = "Free Diving";
ActivityTypes3["Free Diving"] = "Free Diving";
ActivityTypes3["FreeDiving"] = "Free Diving";
ActivityTypes3["diving"] = "Diving";
ActivityTypes3["Diving"] = "Diving";
ActivityTypes3["diving_apnea_hunting"] = "Diving";
ActivityTypes3["Snorkeling"] = "Snorkeling";
ActivityTypes3["Swimrun"] = "Swimrun";
ActivityTypes3["Adventure Racing"] = "Adventure Racing";
ActivityTypes3["Bowling"] = "Bowling";
ActivityTypes3["Cricket"] = "Cricket";
ActivityTypes3["Crosstrainer"] = "Crosstrainer";
ActivityTypes3["Dancing"] = "Dancing";
ActivityTypes3["Golf"] = "Golf";
ActivityTypes3["golf"] = "Golf";
ActivityTypes3["hang_gliding"] = "Hang Gliding";
ActivityTypes3["Hang gliding"] = "Hang Gliding";
ActivityTypes3["HangGliding"] = "Hang Gliding";
ActivityTypes3["Hang Gliding"] = "Hang Gliding";
ActivityTypes3["horseback_riding"] = "Horseback Riding";
ActivityTypes3["Horseback Riding"] = "Horseback Riding";
ActivityTypes3["HorsebackRiding"] = "Horseback Riding";
ActivityTypes3["Horseback riding"] = "Horseback Riding";
ActivityTypes3["Gymnastics"] = "Gymnastics";
ActivityTypes3["Ice Skating"] = "Ice Skating";
ActivityTypes3["IceSkating"] = "Ice Skating";
ActivityTypes3["ice_skating"] = "Ice Skating";
ActivityTypes3["ice skating"] = "Ice Skating";
ActivityTypes3["Ice skating"] = "Ice Skating";
ActivityTypes3["IceSkate"] = "Ice Skating";
ActivityTypes3["Ice Skate"] = "Ice Skating";
ActivityTypes3["Canoeing"] = "Canoeing";
ActivityTypes3["Motorsports"] = "Motorsports";
ActivityTypes3["Mountaineering"] = "Mountaineering";
ActivityTypes3["mountaineering"] = "Mountaineering";
ActivityTypes3["Orienteering"] = "Orienteering";
ActivityTypes3["running_navigate"] = "Orienteering";
ActivityTypes3["generic_navigate"] = "Orienteering";
ActivityTypes3["Rugby"] = "Rugby";
ActivityTypes3["Stretching"] = "Stretching";
ActivityTypes3["training_strength_training"] = "Strength Training";
ActivityTypes3["fitness_equipment_strength_training"] = "Strength Training";
ActivityTypes3["strength_training"] = "Strength Training";
ActivityTypes3["Strength training"] = "Strength Training";
ActivityTypes3["strength training"] = "Strength Training";
ActivityTypes3["Strength Training"] = "Strength Training";
ActivityTypes3["StrengthTraining"] = "Strength Training";
ActivityTypes3["generic_strength_training"] = "Strength Training";
ActivityTypes3["TrackAndField"] = "Track and Field";
ActivityTypes3["Track and Field"] = "Track and Field";
ActivityTypes3["NordicWalking"] = "Nordic Walking";
ActivityTypes3["Nordic Walking"] = "Nordic Walking";
ActivityTypes3["Nordic walking"] = "Nordic Walking";
ActivityTypes3["Snow shoeing"] = "Snowshoeing";
ActivityTypes3["Windsurfing/Surfing"] = "Windsurfing";
ActivityTypes3["windsurfing"] = "Windsurfing";
ActivityTypes3["Windsurfing"] = "Windsurfing";
ActivityTypes3["Windsurf"] = "Windsurfing";
ActivityTypes3["Kettlebell"] = "Kettlebell";
ActivityTypes3["paddling"] = "Paddling";
ActivityTypes3["Paddling"] = "Paddling";
ActivityTypes3["flying"] = "Flying";
ActivityTypes3["Flying"] = "Flying";
ActivityTypes3["Cross fit"] = "Crossfit";
ActivityTypes3["Cross Fit"] = "Crossfit";
ActivityTypes3["cross_fit"] = "Crossfit";
ActivityTypes3["Crossfit"] = "Crossfit";
ActivityTypes3["Kitesurfing/Kiting"] = "Kitesurfing";
ActivityTypes3["kitesurfing"] = "Kitesurfing";
ActivityTypes3["Kitesurfing"] = "Kitesurfing";
ActivityTypes3["Kitesurf"] = "Kitesurfing";
ActivityTypes3["tactical"] = "Tactical";
ActivityTypes3["Tactical"] = "Tactical";
ActivityTypes3["jumpmaster"] = "Jumpmaster";
ActivityTypes3["Jumpmaster"] = "Jumpmaster";
ActivityTypes3["boxing"] = "Boxing";
ActivityTypes3["floor_climbing"] = "Floor Climbing";
ActivityTypes3["Floor climbing"] = "Floor Climbing";
ActivityTypes3["Floor Climbing"] = "Floor Climbing";
ActivityTypes3["FloorClimbing"] = "Floor Climbing";
ActivityTypes3["Paragliding"] = "Paragliding";
ActivityTypes3["fitness_equipment_treadmill"] = "Treadmill";
ActivityTypes3["running_treadmill"] = "Treadmill";
ActivityTypes3["Treadmill"] = "Treadmill";
ActivityTypes3["treadmill"] = "Treadmill";
ActivityTypes3["Frisbee"] = "Frisbee";
ActivityTypes3["Indoor training"] = "Indoor Training";
ActivityTypes3["Indoor Training"] = "Indoor Training";
ActivityTypes3["IndoorTraining"] = "Indoor Training";
ActivityTypes3["Hiking"] = "Hiking";
ActivityTypes3["hiking_trail"] = "Hiking";
ActivityTypes3["hiking"] = "Hiking";
ActivityTypes3["hike"] = "Hiking";
ActivityTypes3["Hike"] = "Hiking";
ActivityTypes3["canyoning"] = "Canyoning";
ActivityTypes3["Canyoning"] = "Canyoning";
ActivityTypes3["ViaFerrata"] = "Via Ferrata";
ActivityTypes3["Via Ferrata"] = "Via Ferrata";
ActivityTypes3["via Ferrata"] = "Via Ferrata";
ActivityTypes3["via ferrata"] = "Via Ferrata";
ActivityTypes3["Fishing"] = "Fishing";
ActivityTypes3["fishing"] = "Fishing";
ActivityTypes3["Hunting"] = "Hunting";
ActivityTypes3["hunting"] = "Hunting";
ActivityTypes3["route"] = "Route";
ActivityTypes3["Route"] = "Route";
ActivityTypes3["inline_skating"] = "Inline Skating";
ActivityTypes3["InlineSkating"] = "Inline Skating";
ActivityTypes3["Inline Skating"] = "Inline Skating";
ActivityTypes3["Inline skating"] = "Inline Skating";
ActivityTypes3["InlineSkate"] = "Inline Skating";
ActivityTypes3["rock_climbing"] = "Rock Climbing";
ActivityTypes3["Rock Climbing"] = "Rock Climbing";
ActivityTypes3["Rock climbing"] = "Rock Climbing";
ActivityTypes3["RockClimbing"] = "Rock Climbing";
ActivityTypes3["indoor_climbing"] = "Indoor Climbing";
ActivityTypes3["IndoorClimbing"] = "Indoor Climbing";
ActivityTypes3["Indoor Climbing"] = "Indoor Climbing";
ActivityTypes3["rock_climbing_indoor_climbing"] = "Indoor Climbing";
ActivityTypes3["bouldering"] = "Bouldering";
ActivityTypes3["Bouldering"] = "Bouldering";
ActivityTypes3["rock_climbing_bouldering"] = "Bouldering";
ActivityTypes3["sky_diving"] = "Sky Diving";
ActivityTypes3["Sky Diving"] = "Sky Diving";
ActivityTypes3["Sky diving"] = "Sky Diving";
ActivityTypes3["sky diving"] = "Sky Diving";
ActivityTypes3["SkyDiving"] = "Sky Diving";
ActivityTypes3["snowshoeing"] = "Snowshoeing";
ActivityTypes3["Snowshoeing"] = "Snowshoeing";
ActivityTypes3["Snowshoe"] = "Snowshoeing";
ActivityTypes3["snowmobiling"] = "Snowmobiling";
ActivityTypes3["Snowmobiling"] = "Snowmobiling";
ActivityTypes3["stand_up_paddleboarding"] = "Stand Up Paddling";
ActivityTypes3["Standup paddling (SUP)"] = "Stand Up Paddling";
ActivityTypes3["Stand up paddling"] = "Stand Up Paddling";
ActivityTypes3["stand up paddling"] = "Stand Up Paddling";
ActivityTypes3["Stand