Wraps @garmin/fitsdk to emit FIT Course files from GPX, the binary format Wahoo's POST /v1/routes API requires. Server-side only — the ~1 MB SDK never ships to the planner browser bundle. Round-trip tests use fit-file-parser as an independent oracle and assert lat/lon parity within 1e-4 deg and altitude within 0.5 m across short flat, alpine, multi-day, and single-point fixtures. Updates design.md decision #1: the original hand-rolled-encoder plan was justified largely by ESM friction in the Garmin SDK, but as of v21.202.0 the SDK is pure ESM with zero deps. Wrapping it saves us ~400 LOC of binary plumbing and ongoing maintenance against future FIT spec updates. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
9 lines
256 B
TypeScript
9 lines
256 B
TypeScript
const SEMICIRCLES_PER_DEGREE = 2 ** 31 / 180;
|
|
|
|
export function degToSemicircles(deg: number): number {
|
|
return Math.round(deg * SEMICIRCLES_PER_DEGREE);
|
|
}
|
|
|
|
export function semicirclesToDeg(semi: number): number {
|
|
return semi / SEMICIRCLES_PER_DEGREE;
|
|
}
|