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.
126 lines (125 loc) • 3.3 kB
TypeScript
import { LapMesgType, RecordMesgType, SessionMesgType, UserProfileMesgType } from "./FIT/types.js";
import { IntensityType, TriggerMethodType } from "./TCX/types.js";
export interface Token {
type: "open" | "close" | "text";
tag: string;
attributes?: AttributeType;
value?: string | number;
}
export interface TokenAST {
tag: string;
attributes?: AttributeType;
children?: TokenAST[];
value?: string | number;
}
export interface AttributeType {
[key: string]: string;
}
export type LatitudeType = number;
export type LongitudeType = number;
export type DegreesType = number;
export interface ExtensionsType {
[key: string]: string | number | undefined | ExtensionsType;
}
export interface SportFileType {
metadata?: {
originType: "GPX" | "FIT" | "TCX" | "HIJSON";
fileName?: string;
fileType?: string;
creator?: string;
date?: string;
};
points?: SportPointType[];
routes?: SportRouteSegType[];
tracks?: SportTrackType[];
__fit__UserProfileMesgs?: UserProfileMesgType[];
}
export interface SportPointType {
lat: LatitudeType;
lon: LongitudeType;
ele?: number;
time?: number;
heartRate?: number;
distance?: number;
accumulatedPower?: number;
speed?: number;
power?: number;
cadence?: number;
temperature?: number;
enhancedAltitude?: number;
enhancedSpeed?: number;
__fit__RecordMesgType?: RecordMesgType;
magvar?: DegreesType;
geoidheight?: number;
name?: string;
cmt?: string;
desc?: string;
src?: string;
sym?: string;
type?: string;
sat?: string;
hdop?: number;
vdop?: number;
pdop?: number;
ageofdgpsdata?: number;
dgpsid?: DegreesType;
turn?: number;
extensions?: ExtensionsType;
}
export interface SportTrackType {
name?: string;
GPX_cmt?: string;
GPX_desc?: string;
GPX_src?: string;
GPX_link?: string;
GPX_number?: number;
GPX_type?: string;
sport?: string;
trackseg?: SportRouteSegType[];
extensions?: ExtensionsType;
startTime?: number;
startLat?: LatitudeType;
startLon?: LongitudeType;
duration?: number;
distance?: number;
endTime?: number;
endLat?: LatitudeType;
endLon?: LongitudeType;
__fit__sessionMesgType?: SessionMesgType;
}
export interface SportRouteSegType {
name?: string;
sport?: string;
GPX_cmt?: string;
GPX_desc?: string;
GPX_src?: string;
GPX_link?: string;
GPX_number?: number;
GPX_type?: string;
extensions?: ExtensionsType[];
points?: SportPointType[];
duration?: number;
distance?: number;
startTime?: number;
endTime?: number;
avgHeartRateBpm?: number;
maxHeartRateBpm?: number;
avgSpeed?: number;
maxSpeed?: number;
avgCadenceBpm?: number;
maxCadenceBpm?: number;
avgPower?: number;
maxPower?: number;
avgTemperature?: number;
maxTemperature?: number;
avgAltitude?: number;
maxEnhancedAltitude?: number;
totalAscent?: number;
totalDescent?: number;
calories?: number;
__tcx__Intensity?: IntensityType;
__tcx__TriggerMethod?: TriggerMethodType;
__tcx__Notes?: string;
__tcx__Extensions?: any;
__fit__lapMesgType?: LapMesgType;
}