@tmlmobilidade/types
Version:
This package provides shared Zod validation schemas and their corresponding TypeScript types for use across projects. All types are automatically inferred from the schemas to ensure full type safety and reduce maintenance overhead.
45 lines (44 loc) • 2.36 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.');
if (!rawData.departure_time)
throw new Error('Missing required field "departure_time" on GTFS StopTime.');
if (!rawData.shape_dist_traveled)
throw new Error('Missing required field "shape_dist_traveled" on GTFS StopTime.');
if (!rawData.stop_id)
throw new Error('Missing required field "stop_id" on GTFS StopTime.');
if (!rawData.stop_sequence)
throw new Error('Missing required field "stop_sequence" on GTFS StopTime.');
if (!rawData.trip_id)
throw new Error('Missing required field "trip_id" on GTFS StopTime.');
// 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.`);
if (Number.isNaN(rawData.stop_sequence))
throw new Error(`Invalid value for "stop_sequence": "${rawData.stop_sequence}". It must be a number.`);
// 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,
};
}