UNPKG

trainingpeaks-sdk

Version:
57 lines (56 loc) 1.89 kB
import { IntensityMetric, IntensityTargetType, LengthMetric, LengthUnit, } from '../../types/index.js'; export class WorkoutStructureBuilder { constructor(averageSpeed = 25) { this.structure = { structure: [], polyline: [], primaryLengthMetric: LengthMetric.DURATION, primaryIntensityMetric: IntensityMetric.PERCENT_OF_THRESHOLD_POWER, primaryIntensityTargetOrRange: IntensityTargetType.TARGET, }; this.currentTime = 0; this.averageSpeed = averageSpeed; } setAverageSpeed(speed) { this.averageSpeed = speed; return this; } addElement(element) { element.begin = this.currentTime; const lengthInSeconds = this.convertLengthToSeconds(element.length); element.end = this.currentTime + lengthInSeconds; this.currentTime = element.end; this.structure.structure.push(element); return this; } addElements(elements) { elements.forEach((element) => this.addElement(element)); return this; } build() { return { ...this.structure }; } convertLengthToSeconds(length) { switch (length.unit) { case LengthUnit.SECOND: { return length.value; } case LengthUnit.MINUTE: { return length.value * 60; } case LengthUnit.HOUR: { return length.value * 3600; } case LengthUnit.KILOMETER: case LengthUnit.MILE: { const distanceInKm = length.unit === LengthUnit.MILE ? length.value * 1.60934 : length.value; return (distanceInKm / this.averageSpeed) * 3600; } default: { return length.value * 60; } } } }