UNPKG

trackswap

Version:

A powerful and flexible GPX parser and encoder library for Node.js and TypeScript. TrackSwap provides comprehensive support for GPX 1.1 format with advanced features like plugin system, middleware support, and optimized performance.

512 lines (511 loc) 14.8 kB
import { IProcessingContext } from "../core/base.js"; export interface FITFileType { fileIdMesgs?: FileIdMesgType[]; fileCreatorMesgs?: FileCreatorMesgType[]; eventMesgs?: EventMesgType[]; deviceInfoMesgs?: DeviceInfoMesgType[]; deviceSettingsMesgs?: DeviceSettingsMesgType[]; userProfileMesgs?: UserProfileMesgType[]; sessionMesgs?: SessionMesgType[]; courseMesgs?: any[]; } export type FITDecoderMesgs = { fileIdMesgs?: FileIdMesgType[]; fileCreatorMesgs?: FileCreatorMesgType[]; eventMesgs?: EventMesgType[]; deviceInfoMesgs?: DeviceInfoMesgType[]; deviceSettingsMesgs?: DeviceSettingsMesgType[]; userProfileMesgs?: UserProfileMesgType[]; sessionMesgs?: Omit<SessionMesgType, "lapMesgs">[]; lapMesgs?: Omit<LapMesgType, "recordMesgs">[]; recordMesgs?: RecordMesgType[]; lengthMesgs?: LengthMesgType[]; courseMesgs?: any[]; [key: string]: any[] | undefined; }; export interface FileIdMesgType { serialNumber?: number; timeCreated?: string; manufacturer?: string; product?: number; type?: string; garminProduct?: string; } export interface FileCreatorMesgType { softwareVersion?: number; } export interface EventMesgType { timestamp?: Date; data?: number; event?: string; eventType?: string; eventGroup?: number; timerTrigger?: string; } export interface DeviceInfoMesgType { timestamp?: string; serialNumber?: number; manufacturer?: string; product?: number; softwareVersion?: number; deviceIndex?: string; deviceType?: number; garminProduct?: string; } export interface DeviceSettingsMesgType { utcOffset?: number; timeOffset?: number; activeTimeZone?: number; timeMode?: string; timeZoneOffset?: number; backlightMode?: string; } export interface UserProfileMesgType { friendlyName?: string; weight?: number; gender?: string; age?: number; height?: number; language?: string; elevSetting?: string; weightSetting?: string; defaultMaxBikingHeartRate?: number; defaultMaxHeartRate?: number; hrSetting?: string; speedSetting?: string; distSetting?: string; powerSetting?: string; activityClass?: number; positionSetting?: string; temperatureSetting?: string; } export interface SessionMesgType { messageIndex?: number; timestamp: Date; event: string; eventType: string; startTime: Date; startPositionLat?: number; startPositionLong?: number; sport?: string; subSport?: string; totalElapsedTime?: number; totalTimerTime?: number; totalDistance?: number; totalCycles?: number; totalStrides?: number; totalStrokes?: number; totalCalories?: number; totalFatCalories?: number; avgSpeed?: number; enhancedAvgSpeed?: number; maxSpeed?: number; enhancedMaxSpeed?: number; avgHeartRate?: number; maxHeartRate?: number; avgCadence?: number; avgRunningCadence?: number; maxCadence?: number; maxRunningCadence?: number; avgPower?: number; maxPower?: number; totalAscent?: number; totalDescent?: number; totalTrainingEffect?: number; firstLapIndex?: number; numLaps?: number; eventGroup?: number; trigger?: string; necLat?: number; necLong?: number; swcLat?: number; swcLong?: number; numLengths?: number; normalizedPower?: number; trainingStressScore?: number; intensityFactor?: number; leftRightBalance?: number; endPositionLat?: number; endPositionLong?: number; avgStrokeCount?: number; avgStrokeDistance?: number; swimStroke?: string; poolLength?: number; thresholdPower?: number; poolLengthUnit?: string; numActiveLengths?: number; totalWork?: number; avgAltitude?: number; enhancedAvgAltitude?: number; maxAltitude?: number; enhancedMaxAltitude?: number; gpsAccuracy?: number; avgGrade?: number; avgPosGrade?: number; avgNegGrade?: number; maxPosGrade?: number; maxNegGrade?: number; avgTemperature?: number; maxTemperature?: number; minTemperature?: number; totalMovingTime?: number; avgPosVerticalSpeed?: number; avgNegVerticalSpeed?: number; maxPosVerticalSpeed?: number; maxNegVerticalSpeed?: number; minHeartRate?: number; timeInHrZone?: number[]; timeInSpeedZone?: number[]; timeInCadenceZone?: number[]; timeInPowerZone?: number[]; avgLapTime?: number; bestLapIndex?: number; minAltitude?: number; enhancedMinAltitude?: number; playerScore?: number; opponentScore?: number; opponentName?: string; strokeCount?: number[]; zoneCount?: number[]; maxBallSpeed?: number; avgBallSpeed?: number; avgVerticalOscillation?: number; avgStanceTimePercent?: number; avgStanceTime?: number; avgFractionalCadence?: number; maxFractionalCadence?: number; totalFractionalCycles?: number; avgTotalHemoglobinConc?: number; minTotalHemoglobinConc?: number; maxTotalHemoglobinConc?: number; avgSaturatedHemoglobinPercent?: number; minSaturatedHemoglobinPercent?: number; maxSaturatedHemoglobinPercent?: number; avgLeftTorqueEffectiveness?: number; avgRightTorqueEffectiveness?: number; avgLeftPedalSmoothness?: number; avgRightPedalSmoothness?: number; avgCombinedPedalSmoothness?: number; sportProfileName?: string; sportIndex?: number; timeStanding?: number; standCount?: number; avgLeftPco?: number; avgRightPco?: number; avgLeftPowerPhase?: number[]; avgLeftPowerPhasePeak?: number[]; avgRightPowerPhase?: number[]; avgRightPowerPhasePeak?: number[]; avgPowerPosition?: number[]; maxPowerPosition?: number[]; avgCadencePosition?: number[]; maxCadencePosition?: number[]; avgLevMotorPower?: number; maxLevMotorPower?: number; levBatteryConsumption?: number; avgVerticalRatio?: number; avgStanceTimeBalance?: number; avgStepLength?: number; totalAnaerobicTrainingEffect?: number; avgVam?: number; avgDepth?: number; maxDepth?: number; surfaceInterval?: number; startCns?: number; endCns?: number; startN2?: number; endN2?: number; avgRespirationRate?: number; maxRespirationRate?: number; minRespirationRate?: number; enhancedAvgRespirationRate?: number; enhancedMaxRespirationRate?: number; enhancedMinRespirationRate?: number; o2Toxicity?: number; diveNumber?: number; trainingLoadPeak?: number; totalGrit?: number; totalFlow?: number; jumpCount?: number; avgGrit?: number; avgFlow?: number; workoutFeel?: number; workoutRpe?: number; avgSpo2?: number; avgStress?: number; sdrrHrv?: number; rmssdHrv?: number; totalFractionalAscent?: number; totalFractionalDescent?: number; avgCoreTemperature?: number; minCoreTemperature?: number; maxCoreTemperature?: number; lapMesgs?: LapMesgType[]; } export interface RecordMesgType { timestamp: Date; positionLat?: number; positionLong?: number; altitude?: number; enhancedAltitude?: number; heartRate?: number; cadence?: number; distance?: number; speed?: number; enhancedSpeed?: number; power?: number; compressedSpeedDistance?: Uint8Array; grade?: number; resistance?: number; timeFromCourse?: number; cycleLength?: number; temperature?: number; speed1s?: number; cycles?: number; totalCycles?: number; compressedAccumulatedPower?: number; accumulatedPower?: number; leftRightBalance?: number; gpsAccuracy?: number; verticalSpeed?: number; calories?: number; verticalOscillation?: number; stanceTimePercent?: number; stanceTime?: number; activityType?: string; leftTorqueEffectiveness?: number; rightTorqueEffectiveness?: number; leftPedalSmoothness?: number; rightPedalSmoothness?: number; combinedPedalSmoothness?: number; time128?: number; strokeType?: string; zone?: number; ballSpeed?: number; cadence256?: number; fractionalCadence?: number; totalHemoglobinConc?: number; totalHemoglobinConcMin?: number; totalHemoglobinConcMax?: number; saturatedHemoglobinPercent?: number; saturatedHemoglobinPercentMin?: number; saturatedHemoglobinPercentMax?: number; deviceIndex?: number; leftPco?: number; rightPco?: number; leftPowerPhase?: number; leftPowerPhasePeak?: number; rightPowerPhase?: number; rightPowerPhasePeak?: number; batterySoc?: number; motorPower?: number; verticalRatio?: number; stanceTimeBalance?: number; stepLength?: number; cycleLength16?: number; absolutePressure?: number; depth?: number; nextStopDepth?: number; nextStopTime?: number; timeToSurface?: number; ndlTime?: number; cnsLoad?: number; n2Load?: number; respirationRate?: number; enhancedRespirationRate?: number; grit?: number; flow?: number; currentStress?: number; ebikeTravelRange?: number; ebikeBatteryLevel?: number; ebikeAssistMode?: number; ebikeAssistLevelPercent?: number; airTimeRemaining?: number; pressureSac?: number; volumeSac?: number; rmv?: number; ascentRate?: number; po2?: number; coreTemperature?: number; } export interface LengthMesgType { timestamp: Date; messageIndex: number; event?: string; eventType?: string; startTime?: Date; totalElapsedTime?: number; totalTimerTime?: number; totalStrokes?: number; avgSpeed?: number; swimStroke?: "breaststroke" | "freestyle" | "backstroke" | "butterfly" | "drill" | "mixed" | "im" | "invalid"; avgSwimmingCadence?: number; eventGroup?: number; totalCalories?: number; lengthType?: "active" | "idle"; playerScore?: number; opponentScore?: number; strokeCount?: number; zoneCount?: number; enhancedAvgRespirationRate?: number; enHancedMaxRespirationRate?: number; avgRespirationRate?: number; maxRespirationRate?: number; } export interface LapMesgType { messageIndex: number; timestamp?: Date; event?: string; eventType?: string; startTime?: Date; startPositionLat?: number; startPositionLong?: number; endPositionLat?: number; endPositionLong?: number; totalElapsedTime?: number; totalTimerTime?: number; totalDistance?: number; totalCycles?: number; totalStrides?: number; totalStrokes?: number; totalCalories?: number; totalFatCalories?: number; avgSpeed?: number; enhancedAvgSpeed?: number; maxSpeed?: number; enhancedMaxSpeed?: number; avgHeartRate?: number; maxHeartRate?: number; avgCadence?: number; avgRunningCadence?: number; maxCadence?: number; maxRunningCadence?: number; avgPower?: number; maxPower?: number; totalAscent?: number; totalDescent?: number; intensity?: string; lapTrigger?: string; sport?: string; eventGroup?: number; numLengths?: number; normalizedPower?: number; leftRightBalance?: number; firstLengthIndex?: number; avgStrokeDistance?: number; swimStroke?: string; subSport?: string; numActiveLengths?: number; totalWork?: number; avgAltitude?: number; enhancedAvgAltitude?: number; maxAltitude?: number; enhancedMaxAltitude?: number; gpsAccuracy?: number; avgGrade?: number; avgPosGrade?: number; avgNegGrade?: number; maxPosGrade?: number; maxNegGrade?: number; avgTemperature?: number; maxTemperature?: number; totalMovingTime?: number; avgPosVerticalSpeed?: number; avgNegVerticalSpeed?: number; maxPosVerticalSpeed?: number; maxNegVerticalSpeed?: number; minHeartRate?: number; timeInHrZone?: number[]; timeInSpeedZone?: number[]; timeInCadenceZone?: number[]; timeInPowerZone?: number[]; repetitionNum?: number; minAltitude?: number; enhancedMinAltitude?: number; wktStepIndex?: number; opponentScore?: number; strokeCount?: number[]; zoneCount?: number[]; avgVerticalOscillation?: number; avgStanceTimePercent?: number; avgStanceTime?: number; avgFractionalCadence?: number; maxFractionalCadence?: number; totalFractionalCycles?: number; playerScore?: number; avgTotalHemoglobinConc?: number; minTotalHemoglobinConc?: number; maxTotalHemoglobinConc?: number; avgSaturatedHemoglobinPercent?: number; minSaturatedHemoglobinPercent?: number; maxSaturatedHemoglobinPercent?: number; avgLeftTorqueEffectiveness?: number; avgRightTorqueEffectiveness?: number; avgLeftPedalSmoothness?: number; avgRightPedalSmoothness?: number; avgCombinedPedalSmoothness?: number; timeStanding?: number; standCount?: number; avgLeftPco?: number; avgRightPco?: number; avgLeftPowerPhase?: number[]; avgLeftPowerPhasePeak?: number[]; avgRightPowerPhase?: number[]; avgRightPowerPhasePeak?: number[]; avgPowerPosition?: number[]; maxPowerPosition?: number[]; avgCadencePosition?: number[]; maxCadencePosition?: number[]; avgLevMotorPower?: number; maxLevMotorPower?: number; levBatteryConsumption?: number; avgVerticalRatio?: number; avgStanceTimeBalance?: number; avgStepLength?: number; avgVam?: number; avgDepth?: number; maxDepth?: number; minTemperature?: number; enhancedAvgRespirationRate?: number; enhancedMaxRespirationRate?: number; avgRespirationRate?: number; maxRespirationRate?: number; totalGrit?: number; totalFlow?: number; jumpCount?: number; avgGrit?: number; avgFlow?: number; totalFractionalAscent?: number; totalFractionalDescent?: number; avgCoreTemperature?: number; minCoreTemperature?: number; maxCoreTemperature?: number; recordMesgs?: RecordMesgType[]; lengthMesgs?: LengthMesgType[]; } export interface ActivityMesgType { timestamp?: Date; totalTimerTime?: number; numSessions?: number; type?: string; event?: string; eventType?: string; [key: string]: number | string | undefined | any; } export interface FITContext extends IProcessingContext { rawData?: Buffer; rawMessages?: FITDecoderMesgs; result?: FITFileType; fileHeader?: { type?: string; manufacturer?: string; product?: number; }; performance: { startTime: number; parseTime?: number; extractTime?: number; structureTime?: number; endTime?: number; }; }