UNPKG

@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.

126 lines (125 loc) 5.51 kB
/* * */ import { validateGtfsBinary, validateGtfsPickupDropoffType } from './common.js'; /** * Validates and transforms a value into a GTFS Route Type. * It accepts numeric or string representations of route types. * @param value The value to validate and transform. * @returns A GTFS Route Type value (0-12). * @throws Error if the value is not a valid GTFS Route type representation. */ export function validateGtfsRouteType(value) { // Validate the route type value if (typeof value === 'number') { if (value >= 0 && value <= 12) return value; } else if (typeof value === 'string') { const numValue = parseInt(value, 10); if (!isNaN(numValue) && numValue >= 0 && numValue <= 12) return numValue; } // If the value does not match any known route type, throw an error throw new Error(`Invalid GTFS Route Type value: "${value}". It must be a number between 0 and 12.`); } /** * Validates and transforms raw GTFS trip data into a structured GTFS_Route object. * 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_Route object. */ export function validateGtfsRoute(rawData) { // Ensure required fields are present if (!rawData.agency_id) throw new Error('Missing required field "agency_id" on GTFS Route.'); if (!rawData.route_color) throw new Error('Missing required field "route_color" on GTFS Route.'); if (!rawData.route_id) throw new Error('Missing required field "route_id" on GTFS Route.'); if (!rawData.route_long_name) throw new Error('Missing required field "route_long_name" on GTFS Route.'); if (!rawData.route_short_name) throw new Error('Missing required field "route_short_name" on GTFS Route.'); if (!rawData.route_text_color) throw new Error('Missing required field "route_text_color" on GTFS Route.'); if (!rawData.route_type) throw new Error('Missing required field "route_type" on GTFS Route.'); // Transform the raw data into the output format return { agency_id: rawData.agency_id, continuous_drop_off: validateGtfsPickupDropoffType(rawData.continuous_drop_off), continuous_pickup: validateGtfsPickupDropoffType(rawData.continuous_pickup), route_color: rawData.route_color, route_desc: rawData.route_desc, route_id: rawData.route_id, route_long_name: rawData.route_long_name, route_short_name: rawData.route_short_name, route_sort_order: Number(rawData.route_sort_order), route_text_color: rawData.route_text_color, route_type: validateGtfsRouteType(rawData.route_type), route_url: rawData.route_url, }; } /** * Validates and transforms a value into a GTFS Path Type. * It accepts numeric or string representations of path types. * @param value The value to validate and transform. * @returns A GTFS Path Type value (1, 2, or 3). * @throws Error if the value is not a valid GTFS Path Type representation. */ export function validateGTFSPathType(value) { // If the value is not provided, default to 1 (Base path) if (value === undefined || value === null) return 1; // Handle numeric and string representations of GTFS Path Type values if (typeof value === 'number') { if (value === 1) return 1; if (value === 2) return 2; if (value === 3) return 3; } if (typeof value === 'string') { if (value === '1') return 1; if (value === '2') return 2; if (value === '3') return 3; } // If the value does not match any known GTFS Path Type representation, throw an error throw new Error(`Invalid GTFS Path Type value: "${value}". It must be 1, 2 or 3.`); } /** * Validates and transforms raw GTFS-TML route data into a structured GTFS_Route_Extended object. * This function checks the types of fields, converts boolean strings to boolean values, * and ensures that required fields are present, including the pattern_id. * @param rawData he raw route data to validate and transform. * @returns A validated GTFS_Route_Extended object. */ export function validateGtfsRouteExtended(rawData) { // Validate the standard GTFS fields const route = validateGtfsRoute(rawData); // Validate the Extended GTFS fields if (!rawData.line_id) throw new Error('Missing required field "line_id" on GTFS Route.'); if (!rawData.line_long_name) throw new Error('Missing required field "line_long_name" on GTFS Route.'); if (!rawData.line_short_name) throw new Error('Missing required field "line_short_name" on GTFS Route.'); // Validate the type of fields if (Number.isNaN(rawData.line_id)) throw new Error(`Invalid line_id: "${rawData.line_id}". It must be a valid number.`); // Transform the raw data into the output format return { ...route, circular: validateGtfsBinary(rawData.circular), line_id: Number(rawData.line_id), line_long_name: rawData.line_long_name, line_short_name: rawData.line_short_name, path_type: validateGTFSPathType(rawData.path_type), route_remarks: rawData.route_remarks, school: validateGtfsBinary(rawData.school), }; }