UNPKG

trainingpeaks-sdk

Version:
61 lines (60 loc) 2.08 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.WorkoutStructureBuilder = void 0; const types_1 = require("../../types/index.js"); class WorkoutStructureBuilder { constructor(averageSpeed = 25) { this.structure = { structure: [], polyline: [], primaryLengthMetric: types_1.LengthMetric.DURATION, primaryIntensityMetric: types_1.IntensityMetric.PERCENT_OF_THRESHOLD_POWER, primaryIntensityTargetOrRange: types_1.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 types_1.LengthUnit.SECOND: { return length.value; } case types_1.LengthUnit.MINUTE: { return length.value * 60; } case types_1.LengthUnit.HOUR: { return length.value * 3600; } case types_1.LengthUnit.KILOMETER: case types_1.LengthUnit.MILE: { const distanceInKm = length.unit === types_1.LengthUnit.MILE ? length.value * 1.60934 : length.value; return (distanceInKm / this.averageSpeed) * 3600; } default: { return length.value * 60; } } } } exports.WorkoutStructureBuilder = WorkoutStructureBuilder;