UNPKG

@tmlmobilidade/types

Version:
45 lines (44 loc) 2.6 kB
/* * */ 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, }; }