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

82 lines (81 loc) 3.54 kB
import { DataBare } from './data.bare'; import { DataJSONInterface } from './data.json.interface'; export declare const DURABILITY_PROTOCOL_VERSION: 1; export declare const DURABILITY_PROTOCOL_ELIGIBILITY_THRESHOLDS: Readonly<{ minimumActivityDurationSeconds: number; minimumQualifyingDurationSeconds: number; minimumCoverageRatio: 0.6; maximumOutputCoefficientOfVariation: 0.25; maximumHardZoneRatio: 0.2; minimumPoolComparableLengths: 24; minimumPoolThirdLengths: 8; }>; export type DurabilityDiscipline = 'cycling' | 'running' | 'open-water-swimming' | 'pool-swimming'; export type DurabilityOutputSource = 'power' | 'grade-adjusted-speed' | 'speed' | 'pool-length-speed'; export type DurabilityOutputUnit = 'W' | 'm/s'; export type DurabilityEligibilityReason = 'eligible' | 'unsupported-activity' | 'missing-output' | 'missing-heart-rate' | 'insufficient-duration' | 'insufficient-coverage' | 'insufficient-halves' | 'too-variable' | 'too-intense' | 'unsupported-context'; export interface DurabilityContext { poolLengthMeters: number; stroke: string; } export interface DurabilityEligibility { eligible: boolean; reason: DurabilityEligibilityReason; validSampleCount: number; comparisonSegments: 'halves' | 'outer-thirds'; earlySampleCount: number; lateSampleCount: number; outputCoefficientOfVariation: number | null; hardZoneRatio: number | null; } export interface AerobicDurabilityEvidence { kind: 'aerobic-efficiency'; firstHalfEfficiency: number; secondHalfEfficiency: number; decouplingPercent: number; firstHalfOutput: number; secondHalfOutput: number; outputRetentionPercent: number; firstHalfHeartRateBpm: number; secondHalfHeartRateBpm: number; heartRateDriftBpm: number; } export interface PoolDurabilityEvidence { kind: 'pool-consistency'; poolLengthMeters: number; stroke: string; comparableLengthCount: number; firstPaceSecondsPer100m: number; finalPaceSecondsPer100m: number; paceRetentionPercent: number; firstSwolf: number | null; finalSwolf: number | null; swolfChange: number | null; } export type DurabilityEvidence = AerobicDurabilityEvidence | PoolDurabilityEvidence; export interface DurabilityEvidenceValue { protocolVersion: typeof DURABILITY_PROTOCOL_VERSION; /** Deterministic digest of every activity input used by protocol v1. */ sourceFingerprint: string; discipline: DurabilityDiscipline; outputSource: DurabilityOutputSource; outputUnit: DurabilityOutputUnit; context: DurabilityContext | null; durationSeconds: number; qualifyingDurationSeconds: number; coverageRatio: number; eligibility: DurabilityEligibility; evidence: DurabilityEvidence | null; } /** Compact activity-level durability summary. Timelines and source streams are intentionally not persisted. */ export declare class DataDurabilityEvidence extends DataBare<DurabilityEvidenceValue> { static type: string; constructor(value: DurabilityEvidenceValue | unknown); setValue(value: DurabilityEvidenceValue): this; getDurabilityValue(): DurabilityEvidenceValue; isValueTypeValid(value: unknown): boolean; toJSON(): DataJSONInterface; } /** Returns a compact canonical value and strips every unknown field, including timelines. */ export declare function normalizeDurabilityEvidenceValue(value: unknown): DurabilityEvidenceValue | null; export declare function normalizeComparablePoolStroke(value: unknown): string | null;