Adding a new URI for GPX technical data and changing the index of wpt, rte and trk.
This commit is contained in:
parent
5fdd63103e
commit
947f4dff3a
|
@ -39,10 +39,10 @@ Object {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Object {
|
Object {
|
||||||
"id": "gpx/4320000000000000/2trk/000000",
|
"id": "gpx/4320000000000000/3trk/000000",
|
||||||
"key": "gpx/4320000000000000/2trk/000000",
|
"key": "gpx/4320000000000000/3trk/000000",
|
||||||
"value": Object {
|
"value": Object {
|
||||||
"rev": "1-46d2f0dcad2299e6ba2830cb1e10b234",
|
"rev": "1-4c114f3ae0073151e4082ff1d220c2a4",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
@ -89,17 +89,17 @@ Object {
|
||||||
},
|
},
|
||||||
Object {
|
Object {
|
||||||
"doc": Object {
|
"doc": Object {
|
||||||
"_id": "gpx/4320000000000000/2trk/000000",
|
"_id": "gpx/4320000000000000/3trk/000000",
|
||||||
"_rev": "1-46d2f0dcad2299e6ba2830cb1e10b234",
|
"_rev": "1-4c114f3ae0073151e4082ff1d220c2a4",
|
||||||
"doc": Object {
|
"doc": Object {
|
||||||
"number": 0,
|
"number": 0,
|
||||||
},
|
},
|
||||||
"type": "trk",
|
"type": "trk",
|
||||||
},
|
},
|
||||||
"id": "gpx/4320000000000000/2trk/000000",
|
"id": "gpx/4320000000000000/3trk/000000",
|
||||||
"key": "gpx/4320000000000000/2trk/000000",
|
"key": "gpx/4320000000000000/3trk/000000",
|
||||||
"value": Object {
|
"value": Object {
|
||||||
"rev": "1-46d2f0dcad2299e6ba2830cb1e10b234",
|
"rev": "1-4c114f3ae0073151e4082ff1d220c2a4",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
@ -122,17 +122,17 @@ Object {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Object {
|
Object {
|
||||||
"id": "gpx/4320000000000000/2trk/000000",
|
"id": "gpx/4320000000000000/3trk/000000",
|
||||||
"key": "gpx/4320000000000000/2trk/000000",
|
"key": "gpx/4320000000000000/3trk/000000",
|
||||||
"value": Object {
|
"value": Object {
|
||||||
"rev": "1-46d2f0dcad2299e6ba2830cb1e10b234",
|
"rev": "1-4c114f3ae0073151e4082ff1d220c2a4",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Object {
|
Object {
|
||||||
"id": "gpx/4320000000000000/2trk/000000/000000",
|
"id": "gpx/4320000000000000/3trk/000000/000000",
|
||||||
"key": "gpx/4320000000000000/2trk/000000/000000",
|
"key": "gpx/4320000000000000/3trk/000000/000000",
|
||||||
"value": Object {
|
"value": Object {
|
||||||
"rev": "1-9ecf6e716dbbb26576a0b13a062b8f5f",
|
"rev": "1-68d7de0569de570229ea9f9e1a0b13cb",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
@ -155,24 +155,24 @@ Object {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Object {
|
Object {
|
||||||
"id": "gpx/4320000000000000/2trk/000000",
|
"id": "gpx/4320000000000000/3trk/000000",
|
||||||
"key": "gpx/4320000000000000/2trk/000000",
|
"key": "gpx/4320000000000000/3trk/000000",
|
||||||
"value": Object {
|
"value": Object {
|
||||||
"rev": "1-46d2f0dcad2299e6ba2830cb1e10b234",
|
"rev": "1-4c114f3ae0073151e4082ff1d220c2a4",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Object {
|
Object {
|
||||||
"id": "gpx/4320000000000000/2trk/000000/000000",
|
"id": "gpx/4320000000000000/3trk/000000/000000",
|
||||||
"key": "gpx/4320000000000000/2trk/000000/000000",
|
"key": "gpx/4320000000000000/3trk/000000/000000",
|
||||||
"value": Object {
|
"value": Object {
|
||||||
"rev": "1-9ecf6e716dbbb26576a0b13a062b8f5f",
|
"rev": "1-68d7de0569de570229ea9f9e1a0b13cb",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Object {
|
Object {
|
||||||
"id": "gpx/4320000000000000/2trk/000000/000000/000000",
|
"id": "gpx/4320000000000000/3trk/000000/000000/000000",
|
||||||
"key": "gpx/4320000000000000/2trk/000000/000000/000000",
|
"key": "gpx/4320000000000000/3trk/000000/000000/000000",
|
||||||
"value": Object {
|
"value": Object {
|
||||||
"rev": "1-99c4c054903f577d66ddac0384e04d06",
|
"rev": "1-7d917d1f3505fe0e3092161694904b53",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
@ -196,10 +196,10 @@ Object {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Object {
|
Object {
|
||||||
"id": "gpx/4320000000000000/0wpt/000000",
|
"id": "gpx/4320000000000000/1wpt/000000",
|
||||||
"key": "gpx/4320000000000000/0wpt/000000",
|
"key": "gpx/4320000000000000/1wpt/000000",
|
||||||
"value": Object {
|
"value": Object {
|
||||||
"rev": "1-a3213e8257fb142c09f8b7d7c9482dac",
|
"rev": "1-c6793365fd0dd56236ab8734a41c7ae7",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
@ -223,10 +223,10 @@ Object {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Object {
|
Object {
|
||||||
"id": "gpx/4320000000000000/1rte/000000",
|
"id": "gpx/4320000000000000/2rte/000000",
|
||||||
"key": "gpx/4320000000000000/1rte/000000",
|
"key": "gpx/4320000000000000/2rte/000000",
|
||||||
"value": Object {
|
"value": Object {
|
||||||
"rev": "1-a683896687f08ed73ceede02dc0c210e",
|
"rev": "1-2ca14f512a9c83f5a239389e580befce",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
@ -250,17 +250,17 @@ Object {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Object {
|
Object {
|
||||||
"id": "gpx/4320000000000000/1rte/000000",
|
"id": "gpx/4320000000000000/2rte/000000",
|
||||||
"key": "gpx/4320000000000000/1rte/000000",
|
"key": "gpx/4320000000000000/2rte/000000",
|
||||||
"value": Object {
|
"value": Object {
|
||||||
"rev": "1-a683896687f08ed73ceede02dc0c210e",
|
"rev": "1-2ca14f512a9c83f5a239389e580befce",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Object {
|
Object {
|
||||||
"id": "gpx/4320000000000000/1rte/000000/000000",
|
"id": "gpx/4320000000000000/2rte/000000/000000",
|
||||||
"key": "gpx/4320000000000000/1rte/000000/000000",
|
"key": "gpx/4320000000000000/2rte/000000/000000",
|
||||||
"value": Object {
|
"value": Object {
|
||||||
"rev": "1-e2eff2ff270417d00f681fcc3f7ceafe",
|
"rev": "1-0f4064d20f6bfac3888a7758851fbac5",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
|
|
@ -20,7 +20,7 @@ describe('The rte module', () => {
|
||||||
test('db.put() a new rte when required', async () => {
|
test('db.put() a new rte when required', async () => {
|
||||||
putNewRte({ gpx: 4320000000000000, rte: 25 });
|
putNewRte({ gpx: 4320000000000000, rte: 25 });
|
||||||
await expect(globalThis.db.put).toBeCalledWith({
|
await expect(globalThis.db.put).toBeCalledWith({
|
||||||
_id: 'gpx/4320000000000000/1rte/000025',
|
_id: 'gpx/4320000000000000/2rte/000025',
|
||||||
_rev: undefined,
|
_rev: undefined,
|
||||||
doc: {
|
doc: {
|
||||||
cmt: undefined,
|
cmt: undefined,
|
||||||
|
|
|
@ -20,7 +20,7 @@ describe('The rtept module', () => {
|
||||||
test('db.put() a new rtept when required', async () => {
|
test('db.put() a new rtept when required', async () => {
|
||||||
putNewRtept({ gpx: 0, rte: 0, rtept: 0 });
|
putNewRtept({ gpx: 0, rte: 0, rtept: 0 });
|
||||||
await expect(globalThis.db.put).toBeCalledWith({
|
await expect(globalThis.db.put).toBeCalledWith({
|
||||||
_id: 'gpx/0000000000000000/1rte/000000/000000',
|
_id: 'gpx/0000000000000000/2rte/000000/000000',
|
||||||
_rev: undefined,
|
_rev: undefined,
|
||||||
doc: {
|
doc: {
|
||||||
$: { lat: 0, lon: 0 },
|
$: { lat: 0, lon: 0 },
|
||||||
|
|
|
@ -20,7 +20,7 @@ describe('The trk module', () => {
|
||||||
test('db.put() a new trk when required', async () => {
|
test('db.put() a new trk when required', async () => {
|
||||||
putNewTrk({ gpx: 1, trk: 2 });
|
putNewTrk({ gpx: 1, trk: 2 });
|
||||||
await expect(globalThis.db.put).toBeCalledWith({
|
await expect(globalThis.db.put).toBeCalledWith({
|
||||||
_id: 'gpx/0000000000000001/2trk/000002',
|
_id: 'gpx/0000000000000001/3trk/000002',
|
||||||
_rev: undefined,
|
_rev: undefined,
|
||||||
doc: {
|
doc: {
|
||||||
cmt: undefined,
|
cmt: undefined,
|
||||||
|
|
|
@ -25,7 +25,7 @@ describe('The trkpt module', () => {
|
||||||
trkpt: 4,
|
trkpt: 4,
|
||||||
});
|
});
|
||||||
await expect(globalThis.db.put).toBeCalledWith({
|
await expect(globalThis.db.put).toBeCalledWith({
|
||||||
_id: 'gpx/0000000000000001/2trk/000002/000003/000004',
|
_id: 'gpx/0000000000000001/3trk/000002/000003/000004',
|
||||||
_rev: undefined,
|
_rev: undefined,
|
||||||
doc: {
|
doc: {
|
||||||
$: { lat: 0, lon: 0 },
|
$: { lat: 0, lon: 0 },
|
||||||
|
|
|
@ -20,7 +20,7 @@ describe('The trkseg module', () => {
|
||||||
test('db.put() a new trk when required', async () => {
|
test('db.put() a new trk when required', async () => {
|
||||||
putNewTrkseg({ gpx: 1234567890123456, trk: 123456, trkseg: 5 });
|
putNewTrkseg({ gpx: 1234567890123456, trk: 123456, trkseg: 5 });
|
||||||
await expect(globalThis.db.put).toBeCalledWith({
|
await expect(globalThis.db.put).toBeCalledWith({
|
||||||
_id: 'gpx/1234567890123456/2trk/123456/000005',
|
_id: 'gpx/1234567890123456/3trk/123456/000005',
|
||||||
_rev: undefined,
|
_rev: undefined,
|
||||||
doc: {
|
doc: {
|
||||||
trkpt: undefined,
|
trkpt: undefined,
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
interface Gpx {
|
interface Gpx {
|
||||||
$: Gpx_;
|
$: Gpx_;
|
||||||
metadata?: Metadata;
|
metadata?: Metadata;
|
||||||
wpt?: any[];
|
wpt?: Wpt[];
|
||||||
rte?: any[];
|
rte?: Rte[];
|
||||||
trk?: Trk[];
|
trk?: Trk[];
|
||||||
extensions?: Extensions;
|
extensions?: Extensions;
|
||||||
}
|
}
|
||||||
|
@ -27,10 +27,21 @@ interface Metadata {
|
||||||
link?: Link[];
|
link?: Link[];
|
||||||
time?: string;
|
time?: string;
|
||||||
keywords?: string;
|
keywords?: string;
|
||||||
bounds?: string;
|
bounds?: Bounds;
|
||||||
extensions?: Extensions;
|
extensions?: Extensions;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface Bounds {
|
||||||
|
$: Bounds_;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface Bounds_ {
|
||||||
|
minlat: number;
|
||||||
|
minlon: number;
|
||||||
|
maxlat: number;
|
||||||
|
maxlon: number;
|
||||||
|
}
|
||||||
|
|
||||||
interface Extensions {
|
interface Extensions {
|
||||||
'dyo:speed'?: number;
|
'dyo:speed'?: number;
|
||||||
'dyo:course'?: number;
|
'dyo:course'?: number;
|
||||||
|
@ -67,7 +78,7 @@ interface Trkseg {
|
||||||
}
|
}
|
||||||
|
|
||||||
interface Wpt {
|
interface Wpt {
|
||||||
$: Trkpt_;
|
$: Wpt_;
|
||||||
ele?: number;
|
ele?: number;
|
||||||
time?: string;
|
time?: string;
|
||||||
magvar?: number;
|
magvar?: number;
|
||||||
|
@ -89,7 +100,7 @@ interface Wpt {
|
||||||
extensions?: Extensions;
|
extensions?: Extensions;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface Trkpt_ {
|
interface Wpt_ {
|
||||||
lat: number;
|
lat: number;
|
||||||
lon: number;
|
lon: number;
|
||||||
}
|
}
|
||||||
|
@ -103,33 +114,6 @@ interface Rte {
|
||||||
number?: number;
|
number?: number;
|
||||||
type?: string;
|
type?: string;
|
||||||
extensions?: Extensions;
|
extensions?: Extensions;
|
||||||
rtept?: Rtept[];
|
rtept?: Wpt[];
|
||||||
}
|
}
|
||||||
|
|
||||||
interface Rtept {
|
|
||||||
$: Rtept_;
|
|
||||||
ele?: number;
|
|
||||||
time?: string;
|
|
||||||
magvar?: number;
|
|
||||||
geoidheight?: number;
|
|
||||||
name?: string;
|
|
||||||
cmt?: string;
|
|
||||||
desc?: string;
|
|
||||||
src?: string;
|
|
||||||
link?: Link;
|
|
||||||
sym?: string;
|
|
||||||
type?: string;
|
|
||||||
fix?: string;
|
|
||||||
sat?: number;
|
|
||||||
hdop?: number;
|
|
||||||
vdop?: number;
|
|
||||||
pdop?: number;
|
|
||||||
ageofdgpsdata?: number;
|
|
||||||
dgpsid?: number;
|
|
||||||
extensions?: Extensions;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface Rtept_ {
|
|
||||||
lat: number;
|
|
||||||
lon: number;
|
|
||||||
}
|
|
||||||
|
|
|
@ -20,7 +20,7 @@ describe('The wpt module', () => {
|
||||||
test('db.put() a new wpt when required', async () => {
|
test('db.put() a new wpt when required', async () => {
|
||||||
putNewWpt({ gpx: 1, wpt: 2 });
|
putNewWpt({ gpx: 1, wpt: 2 });
|
||||||
await expect(globalThis.db.put).toBeCalledWith({
|
await expect(globalThis.db.put).toBeCalledWith({
|
||||||
_id: 'gpx/0000000000000001/0wpt/000002',
|
_id: 'gpx/0000000000000001/1wpt/000002',
|
||||||
_rev: undefined,
|
_rev: undefined,
|
||||||
doc: {
|
doc: {
|
||||||
$: { lat: 0, lon: 0 },
|
$: { lat: 0, lon: 0 },
|
||||||
|
|
|
@ -14,30 +14,30 @@ describe('Checking some DocURI features', () => {
|
||||||
|
|
||||||
describe('Checking a multilevel route', () => {
|
describe('Checking a multilevel route', () => {
|
||||||
test(', using the two levels', () => {
|
test(', using the two levels', () => {
|
||||||
const gpx = route('gpx/:gpx/2trk/:trk');
|
const gpx = route('gpx/:gpx/3trk/:trk');
|
||||||
expect(gpx({ gpx: 10, trk: 0 })).toBe('gpx/10/2trk/0');
|
expect(gpx({ gpx: 10, trk: 0 })).toBe('gpx/10/3trk/0');
|
||||||
});
|
});
|
||||||
test(', using the two levels (vive-versa)', () => {
|
test(', using the two levels (vive-versa)', () => {
|
||||||
const gpx = route('gpx/:gpx/2trk/:trk');
|
const gpx = route('gpx/:gpx/3trk/:trk');
|
||||||
expect(gpx('gpx/10/2trk/0')).toMatchObject({ gpx: '10', trk: '0' });
|
expect(gpx('gpx/10/3trk/0')).toMatchObject({ gpx: '10', trk: '0' });
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('Checking a multilevel route with optional part', () => {
|
describe('Checking a multilevel route with optional part', () => {
|
||||||
test(', using the two levels', () => {
|
test(', using the two levels', () => {
|
||||||
const gpx = route('gpx/:gpx(/2trk/:trk)');
|
const gpx = route('gpx/:gpx(/3trk/:trk)');
|
||||||
expect(gpx({ gpx: 10, trk: 0 })).toBe('gpx/10/2trk/0');
|
expect(gpx({ gpx: 10, trk: 0 })).toBe('gpx/10/3trk/0');
|
||||||
});
|
});
|
||||||
test(', using the two levels (vive-versa)', () => {
|
test(', using the two levels (vive-versa)', () => {
|
||||||
const gpx = route('gpx/:gpx(/2trk/:trk)');
|
const gpx = route('gpx/:gpx(/3trk/:trk)');
|
||||||
expect(gpx('gpx/10/2trk/0')).toMatchObject({ gpx: '10', trk: '0' });
|
expect(gpx('gpx/10/3trk/0')).toMatchObject({ gpx: '10', trk: '0' });
|
||||||
});
|
});
|
||||||
test(', using only one level', () => {
|
test(', using only one level', () => {
|
||||||
const gpx = route('gpx/:gpx(/2trk/:trk)');
|
const gpx = route('gpx/:gpx(/3trk/:trk)');
|
||||||
expect(gpx({ gpx: 10 })).toBe('gpx/10/2trk/'); //Unfortunately !
|
expect(gpx({ gpx: 10 })).toBe('gpx/10/3trk/'); //Unfortunately !
|
||||||
});
|
});
|
||||||
test(', using only one level (vive-versa)', () => {
|
test(', using only one level (vive-versa)', () => {
|
||||||
const gpx = route('gpx/:gpx(/2trk/:trk)');
|
const gpx = route('gpx/:gpx(/3trk/:trk)');
|
||||||
expect(gpx('gpx/10')).toMatchObject({ gpx: '10' });
|
expect(gpx('gpx/10')).toMatchObject({ gpx: '10' });
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -62,7 +62,7 @@ describe('Checking trk ids', () => {
|
||||||
gpx: 1234567890123456,
|
gpx: 1234567890123456,
|
||||||
trk: 123456,
|
trk: 123456,
|
||||||
};
|
};
|
||||||
const key = 'gpx/1234567890123456/2trk/123456';
|
const key = 'gpx/1234567890123456/3trk/123456';
|
||||||
test(', vice', () => {
|
test(', vice', () => {
|
||||||
const rte = uri('trk', id);
|
const rte = uri('trk', id);
|
||||||
expect(rte).toBe(key);
|
expect(rte).toBe(key);
|
||||||
|
@ -79,7 +79,7 @@ describe('Checking trkseg ids', () => {
|
||||||
trk: 0,
|
trk: 0,
|
||||||
trkseg: 3,
|
trkseg: 3,
|
||||||
};
|
};
|
||||||
const key = 'gpx/0000000000000111/2trk/000000/000003';
|
const key = 'gpx/0000000000000111/3trk/000000/000003';
|
||||||
test(', vice', () => {
|
test(', vice', () => {
|
||||||
const rte = uri('trkseg', id);
|
const rte = uri('trkseg', id);
|
||||||
expect(rte).toBe(key);
|
expect(rte).toBe(key);
|
||||||
|
@ -97,7 +97,7 @@ describe('Checking trkpt ids', () => {
|
||||||
trkseg: 0,
|
trkseg: 0,
|
||||||
trkpt: 155,
|
trkpt: 155,
|
||||||
};
|
};
|
||||||
const key = 'gpx/0000000000000025/2trk/000008/000000/000155';
|
const key = 'gpx/0000000000000025/3trk/000008/000000/000155';
|
||||||
test(', vice', () => {
|
test(', vice', () => {
|
||||||
const rte = uri('trkpt', id);
|
const rte = uri('trkpt', id);
|
||||||
expect(rte).toBe(key);
|
expect(rte).toBe(key);
|
||||||
|
|
|
@ -28,12 +28,13 @@ const routes = {
|
||||||
dbdef: route('dbdef', coding),
|
dbdef: route('dbdef', coding),
|
||||||
settings: route('settings', coding),
|
settings: route('settings', coding),
|
||||||
gpx: route('gpx/:gpx', coding),
|
gpx: route('gpx/:gpx', coding),
|
||||||
wpt: route('gpx/:gpx/0wpt/:wpt', coding),
|
tech: route('gpx/:gpx/0tech', coding),
|
||||||
rte: route('gpx/:gpx/1rte/:rte', coding),
|
wpt: route('gpx/:gpx/1wpt/:wpt', coding),
|
||||||
rtept: route('gpx/:gpx/1rte/:rte/:rtept', coding),
|
rte: route('gpx/:gpx/2rte/:rte', coding),
|
||||||
trk: route('gpx/:gpx/2trk/:trk', coding),
|
rtept: route('gpx/:gpx/2rte/:rte/:rtept', coding),
|
||||||
trkseg: route('gpx/:gpx/2trk/:trk/:trkseg', coding),
|
trk: route('gpx/:gpx/3trk/:trk', coding),
|
||||||
trkpt: route('gpx/:gpx/2trk/:trk/:trkseg/:trkpt', coding),
|
trkseg: route('gpx/:gpx/3trk/:trk/:trkseg', coding),
|
||||||
|
trkpt: route('gpx/:gpx/3trk/:trk/:trkseg/:trkpt', coding),
|
||||||
};
|
};
|
||||||
|
|
||||||
type RouteKey = keyof typeof routes;
|
type RouteKey = keyof typeof routes;
|
||||||
|
|
Loading…
Reference in New Issue