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

109 lines (108 loc) 5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getStreamDerivationRules = getStreamDerivationRules; exports.getStreamDerivationRule = getStreamDerivationRule; exports.getDependencyTypesForResolution = getDependencyTypesForResolution; exports.canDeriveStreamType = canDeriveStreamType; const data_altitude_1 = require("../data/data.altitude"); const data_altitude_smooth_1 = require("../data/data.altitude-smooth"); const data_distance_1 = require("../data/data.distance"); const data_gnss_distance_1 = require("../data/data.gnss-distance"); const data_grade_1 = require("../data/data.grade"); const data_grade_adjusted_pace_1 = require("../data/data.grade-adjusted-pace"); const data_grade_adjusted_speed_1 = require("../data/data.grade-adjusted-speed"); const data_grade_smooth_1 = require("../data/data.grade-smooth"); const data_latitude_degrees_1 = require("../data/data.latitude-degrees"); const data_longitude_degrees_1 = require("../data/data.longitude-degrees"); const data_pace_1 = require("../data/data.pace"); const data_power_1 = require("../data/data.power"); const data_power_balance_left_1 = require("../data/data.power-balance-left"); const data_power_balance_right_1 = require("../data/data.power-balance-right"); const data_power_left_1 = require("../data/data.power-left"); const data_power_right_1 = require("../data/data.power-right"); const data_speed_1 = require("../data/data.speed"); const data_stance_time_balance_left_1 = require("../data/data-stance-time-balance-left"); const data_stance_time_balance_right_1 = require("../data/data-stance-time-balance-right"); const data_swim_pace_1 = require("../data/data.swim-pace"); const STREAM_DERIVATION_RULES = [ { provides: data_altitude_smooth_1.DataAltitudeSmooth.type, requiresAll: [data_altitude_1.DataAltitude.type] }, { provides: data_distance_1.DataDistance.type, requiresAll: [data_latitude_degrees_1.DataLatitudeDegrees.type, data_longitude_degrees_1.DataLongitudeDegrees.type] }, { provides: data_gnss_distance_1.DataGNSSDistance.type, requiresAll: [data_latitude_degrees_1.DataLatitudeDegrees.type, data_longitude_degrees_1.DataLongitudeDegrees.type] }, { provides: data_speed_1.DataSpeed.type, requiresAll: [data_latitude_degrees_1.DataLatitudeDegrees.type, data_longitude_degrees_1.DataLongitudeDegrees.type] }, { provides: data_grade_1.DataGrade.type, requiresAll: [data_distance_1.DataDistance.type], requiresOneOf: [data_altitude_smooth_1.DataAltitudeSmooth.type, data_altitude_1.DataAltitude.type] }, { provides: data_grade_smooth_1.DataGradeSmooth.type, requiresAll: [data_grade_1.DataGrade.type] }, { provides: data_grade_adjusted_speed_1.DataGradeAdjustedSpeed.type, requiresAll: [data_speed_1.DataSpeed.type, data_grade_smooth_1.DataGradeSmooth.type] }, { provides: data_pace_1.DataPace.type, requiresAll: [data_speed_1.DataSpeed.type] }, { provides: data_swim_pace_1.DataSwimPace.type, requiresAll: [data_speed_1.DataSpeed.type] }, { provides: data_grade_adjusted_pace_1.DataGradeAdjustedPace.type, requiresAll: [data_grade_adjusted_speed_1.DataGradeAdjustedSpeed.type] }, { provides: data_power_left_1.DataPowerLeft.type, requiresAll: [data_power_1.DataPower.type, data_power_balance_left_1.DataPowerBalanceLeft.type] }, { provides: data_power_right_1.DataPowerRight.type, requiresAll: [data_power_1.DataPower.type, data_power_balance_right_1.DataPowerBalanceRight.type] }, { provides: data_stance_time_balance_right_1.DataStanceTimeBalanceRight.type, requiresAll: [data_stance_time_balance_left_1.DataStanceTimeBalanceLeft.type] } ]; const STREAM_DERIVATION_RULES_BY_TARGET = new Map(STREAM_DERIVATION_RULES.map(rule => [rule.provides, rule])); function getStreamDerivationRules() { return [...STREAM_DERIVATION_RULES]; } function getStreamDerivationRule(targetType) { return STREAM_DERIVATION_RULES_BY_TARGET.get(targetType) || null; } /** * Returns dependency types to add in dependency-closure resolution. * For `requiresOneOf`, all candidates are returned as conservative dependencies. */ function getDependencyTypesForResolution(targetType) { const rule = getStreamDerivationRule(targetType); if (!rule) { return []; } return [...new Set([...(rule.requiresAll || []), ...(rule.requiresOneOf || [])])]; } function canDeriveStreamType(targetType, hasStreamType) { const rule = getStreamDerivationRule(targetType); if (!rule) { return true; } const hasAll = (rule.requiresAll || []).every(requiredType => hasStreamType(requiredType)); const hasOneOf = !rule.requiresOneOf || rule.requiresOneOf.some(requiredType => hasStreamType(requiredType)); return hasAll && hasOneOf; }