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.
65 lines (64 loc) • 3.05 kB
TypeScript
import { IPlugin, IConverterPlugin, IMiddlewarePlugin, BaseConverter, BaseMiddleware, IProcessingContext } from "../core/base.js";
import { SportFileType, SportPointType, SportRouteSegType, SportTrackType, TokenAST } from "../types.js";
export interface SportContext extends IProcessingContext {
sourceFormat: string;
sourceData: any;
result?: SportFileType;
performance: {
startTime: number;
convertTime?: number;
endTime?: number;
};
}
export interface SportEncodingContext extends IProcessingContext {
targetFormat: string;
result?: any;
performance: {
startTime: number;
encodeTime?: number;
endTime?: number;
};
}
export interface ISportPlugin extends IPlugin {
}
export interface ISportConverterPlugin extends IConverterPlugin {
convert(ast: TokenAST, context: SportContext): SportFileType | undefined;
}
export interface ISportMiddlewarePlugin extends IMiddlewarePlugin {
process(context: SportContext): Promise<void>;
}
export interface ISportEncoderPlugin extends IPlugin<SportEncodingContext> {
encode(sportData: SportFileType, context: SportEncodingContext): any | undefined;
supports(format: string): boolean;
priority?: number;
}
export declare abstract class BaseSportConverter extends BaseConverter<SportContext> implements ISportConverterPlugin {
protected convertPoints(points: any[]): SportPointType[];
protected abstract convertPoint(point: any): SportPointType | undefined;
protected convertTime(time: Date | string | number | undefined): number | undefined;
protected calculateDistance(points: SportPointType[]): number | undefined;
protected calculateDuration(points: SportPointType[]): number | undefined;
}
export declare abstract class BaseSportEncoder implements ISportEncoderPlugin {
abstract name: string;
abstract supportedTags: string[];
version: string;
priority: number;
abstract encode(sportData: SportFileType, context: SportEncodingContext): any | undefined;
supports(format: string): boolean;
initialize(context: SportEncodingContext): Promise<void>;
destroy(context: SportEncodingContext): Promise<void>;
validate(context: SportEncodingContext): Promise<boolean>;
protected convertTimeToDate(time: number | undefined): Date;
protected convertTimeToString(time: number | undefined): string;
protected ensureValidCoordinates(lat: number, lon: number): boolean;
protected round(value: number, precision?: number): number;
}
export declare abstract class BaseSportMiddleware extends BaseMiddleware<SportContext, SportFileType> implements ISportMiddlewarePlugin {
abstract process(context: SportContext): Promise<void>;
onError(error: Error, context: SportContext): Promise<void>;
protected validateSportFile(sportFile: SportFileType): boolean;
protected validateTrack(track: SportTrackType): boolean;
protected validateRoute(route: SportRouteSegType): boolean;
protected validatePoint(point: SportPointType): boolean;
}