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.
192 lines (191 loc) • 4.85 kB
TypeScript
import { ExtensionsType, Token, TokenAST } from "../types.js";
import { IProcessingContext } from "../core/base.js";
export interface TCXFileType {
version?: string;
creator?: string;
xmlns?: string;
"xmlns:gte"?: string;
"xmlns:xsi"?: string;
"xsi:schemaLocation"?: string;
Folders?: FolderType;
Activities?: ActivityListType;
Workouts?: WorkoutListType;
Courses?: CourseListType;
Author?: AbstractSourceType;
Extensions?: any;
[key: string]: any | undefined;
}
export interface FolderType {
History?: HistoryType;
Workouts?: WorkoutListType;
Courses?: any;
}
export interface WorkoutListType {
Workout?: WorkoutType[];
}
export interface WorkoutType {
Name?: string;
Step?: AbstractStepType;
ScheduledOn?: string;
Notes?: string;
Creator?: AbstractSourceType;
Extensions?: ExtensionsType;
}
export interface AbstractSourceType {
Name?: string;
}
export interface AbstractStepType {
StepId?: string;
}
export interface CourseListType {
Course?: CourseType[];
}
export interface CourseType {
Name?: string;
Lap?: CourseLapType[];
Track?: TrackType[];
Notes?: string;
CoursePoint?: CoursePointType[];
Creator?: AbstractSourceType;
Extensions?: ExtensionsType;
}
export interface CoursePointType {
Name?: string;
Time?: number;
Position?: PositionType;
AltitudeMeters?: number;
PointType?: string;
Notes?: string;
Extensions?: ExtensionsType;
}
export interface CourseLapType {
TotalTimeSeconds?: number;
DistanceMeters?: number;
BeginPosition?: PositionType;
BeginAltitudeMeters?: number;
EndPosition?: PositionType;
EndAltitudeMeters?: number;
AverageHeartRateBpm?: number;
MaximumHeartRateBpm?: number;
Intensity?: IntensityType;
Cadence?: CadenceType;
Extensions?: ExtensionsType;
}
export interface HistoryType {
Running?: HistoryFolderType;
Biking?: HistoryFolderType;
Other?: HistoryFolderType;
MultiSport?: HistoryFolderType;
Extensions?: ExtensionsType;
}
export interface HistoryFolderType {
Folder?: HistoryFolderType;
ActivityRef?: ActivityRefType;
Week?: WeekType;
Notes?: string;
Extensions?: any;
}
export interface ActivityRefType {
Id: string;
}
export interface WeekType {
Notes?: string;
StartDay?: string;
}
export interface ActivityListType {
Activity?: ActivityType[];
MultiSportSession?: MultiSportSessionType[];
}
export interface ActivityType {
Sport?: "Other" | "Running" | "Biking";
Id: string;
Lap: ActivityLapType[];
Notes?: string;
Training?: any;
Creator?: any;
Extensions?: any;
}
export interface TrainingType {
QuickWorkoutResults?: QuickWorkoutType;
Plan?: PlanType;
VirtualPartner: boolean;
}
export interface QuickWorkoutType {
TotalTimeSeconds: number;
DistanceMeters: number;
}
export interface PlanType {
Name?: string;
Extensions?: any;
Type: "Workout" | "Course";
IntervalWorkout: boolean;
}
export interface ActivityLapType {
TotalTimeSeconds?: number;
DistanceMeters?: number;
MaximumSpeed?: number;
Calories?: number;
Heartratebpm?: number;
AverageHeartRateBpm?: number;
MaximumHeartRateBpm?: number;
Intensity?: IntensityType;
Cadence?: CadenceType;
TriggerMethod?: TriggerMethodType;
Track?: TrackType[];
Notes?: string;
Extensions?: any;
}
export type TriggerMethodType = "Manual" | "Distance" | "Location" | "Time" | "HeartRate";
export type IntensityType = "Active" | "Resting";
export interface CadenceType {
Low: number;
High: number;
}
export interface HeartRateInBeatsPerMinuteType {
Value: number;
}
export interface MultiSportSessionType {
Id?: string;
FirstSport?: FirstSportType;
NextSport?: NextSportType[];
Notes?: string;
}
export interface FirstSportType {
Activity?: ActivityType;
}
export interface NextSportType {
Transition?: ActivityLapType;
Activity?: ActivityType;
}
export interface TrackType {
Trackpoint?: TrackpointType[];
}
export interface TrackpointType {
Time?: string;
Position?: PositionType;
AltitudeMeters?: number;
DistanceMeters?: number;
HeartRateBpm?: number;
Cadence?: CadenceType;
SensorState?: "Present" | "Absent";
Extensions?: any;
}
export interface PositionType {
LatitudeDegrees?: string;
LongitudeDegrees?: string;
}
export interface TCXContext extends IProcessingContext {
rawData?: Buffer;
xmlContent?: string;
tokens?: Token[];
ast?: TokenAST;
result?: TCXFileType;
performance: {
startTime: number;
tokenizeTime?: number;
astTime?: number;
convertTime?: number;
endTime?: number;
processingTime?: number;
};
}