33 lines
706 B
JavaScript
33 lines
706 B
JavaScript
function parseNullableNumber(value) {
|
|
if (value === undefined || value === null || value === '') {
|
|
return null;
|
|
}
|
|
|
|
const parsed = Number.parseFloat(value);
|
|
return Number.isFinite(parsed) ? parsed : null;
|
|
}
|
|
|
|
function decorateOfficialVehicle(row) {
|
|
return {
|
|
...row,
|
|
source: 'official',
|
|
confidence: 1,
|
|
accuracy_m: parseNullableNumber(row.accuracy_meters),
|
|
is_estimated: false
|
|
};
|
|
}
|
|
|
|
function sortLiveVehicles(a, b) {
|
|
if (a.source !== b.source) {
|
|
return a.source === 'official' ? -1 : 1;
|
|
}
|
|
|
|
return new Date(b.last_seen_at).getTime() - new Date(a.last_seen_at).getTime();
|
|
}
|
|
|
|
module.exports = {
|
|
decorateOfficialVehicle,
|
|
parseNullableNumber,
|
|
sortLiveVehicles
|
|
};
|