52 lines
1.2 KiB
TypeScript
52 lines
1.2 KiB
TypeScript
import route from './docuri';
|
|
|
|
const integerType = (n: number) => {
|
|
return {
|
|
encoder: (v: number) => v.toString().padStart(n, '0'),
|
|
decoder: parseInt,
|
|
};
|
|
};
|
|
|
|
const bigIntType = (n: number) => {
|
|
return {
|
|
encoder: (v: number) => v.toString().padStart(n, '0'),
|
|
decoder: BigInt,
|
|
};
|
|
};
|
|
|
|
const coding = {
|
|
gpx: integerType(16),
|
|
wpt: integerType(6),
|
|
rte: integerType(6),
|
|
rtept: integerType(6),
|
|
trk: integerType(6),
|
|
trkseg: integerType(6),
|
|
trkpt: integerType(6),
|
|
};
|
|
|
|
const routes = {
|
|
dbdef: route('dbdef', coding),
|
|
settings: route('settings', coding),
|
|
gpx: route('gpx/:gpx', coding),
|
|
wpt: route('gpx/:gpx/1wpt/:wpt', coding),
|
|
rte: route('gpx/:gpx/2rte/:rte', coding),
|
|
rtept: route('gpx/:gpx/2rte/:rte/:rtept', coding),
|
|
trk: route('gpx/:gpx/3trk/:trk', coding),
|
|
trkseg: route('gpx/:gpx/3trk/:trk/:trkseg', coding),
|
|
trkpt: route('gpx/:gpx/3trk/:trk/:trkseg/:trkpt', coding),
|
|
extensions: route('gpx/:gpx/4extensions', coding),
|
|
};
|
|
|
|
type RouteKey = keyof typeof routes;
|
|
|
|
const uri = (type: RouteKey, param: any) => {
|
|
return routes[type](param);
|
|
};
|
|
|
|
export default uri;
|
|
|
|
const minDate = -8640000000000000;
|
|
const halfMinDate = minDate / 2;
|
|
|
|
export const intToGpxId = (i: number) => Math.round(i / 2) - halfMinDate;
|