@tmlmobilidade/types
Version:
45 lines (44 loc) • 2.6 kB
JavaScript
/* * */
import { validateGtfsBinary, validateGtfsPickupDropoffType } from './common.js';
/**
* Validates and transforms a raw GTFS stop time into the GTFS_StopTime format.
* This function checks the types of fields, converts boolean strings to boolean values,
* and ensures that required fields are present.
* @param rawData The raw trip data to validate and transform.
* @returns A validated GTFS_StopTime object.
*/
export function validateGtfsStopTime(rawData) {
// Ensure required fields are present
if (!rawData.arrival_time)
throw new Error(`Missing required field "arrival_time" on GTFS StopTime: ${JSON.stringify(rawData)}`);
if (!rawData.departure_time)
throw new Error(`Missing required field "departure_time" on GTFS StopTime: ${JSON.stringify(rawData)}`);
if (!rawData.shape_dist_traveled)
throw new Error(`Missing required field "shape_dist_traveled" on GTFS StopTime: ${JSON.stringify(rawData)}`);
if (!rawData.stop_id)
throw new Error(`Missing required field "stop_id" on GTFS StopTime: ${JSON.stringify(rawData)}`);
if (!rawData.stop_sequence)
throw new Error(`Missing required field "stop_sequence" on GTFS StopTime: ${JSON.stringify(rawData)}`);
if (!rawData.trip_id)
throw new Error(`Missing required field "trip_id" on GTFS StopTime: ${JSON.stringify(rawData)}`);
// Validate the individual fields
if (Number.isNaN(rawData.shape_dist_traveled))
throw new Error(`Invalid value for "shape_dist_traveled": "${rawData.shape_dist_traveled}". It must be a number. GTFS StopTime: ${JSON.stringify(rawData)}`);
if (Number.isNaN(rawData.stop_sequence))
throw new Error(`Invalid value for "stop_sequence": "${rawData.stop_sequence}". It must be a number. GTFS StopTime: ${JSON.stringify(rawData)}`);
// Transform the raw data into the output format
return {
arrival_time: rawData.arrival_time,
continuous_drop_off: validateGtfsPickupDropoffType(rawData.continuous_drop_off),
continuous_pickup: validateGtfsPickupDropoffType(rawData.continuous_pickup),
departure_time: rawData.departure_time,
drop_off_type: validateGtfsPickupDropoffType(rawData.drop_off_type),
pickup_type: validateGtfsPickupDropoffType(rawData.pickup_type),
shape_dist_traveled: Number(rawData.shape_dist_traveled),
stop_headsign: rawData.stop_headsign,
stop_id: rawData.stop_id,
stop_sequence: Number(rawData.stop_sequence),
timepoint: validateGtfsBinary(rawData.timepoint),
trip_id: rawData.trip_id,
};
}