@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.
236 lines (235 loc) • 6 kB
JavaScript
/* * */
import { CommentSchema } from './_common/comment.js';
import { DocumentSchema } from './_common/document.js';
import { unixTimeStampSchema } from './_common/unix-timestamp.js';
import { z } from 'zod';
/* * */
//
// Define constants for enum values for better maintainability
const JURISDICTION_VALUES = [
'ip',
'municipality',
'other',
'unknown',
];
const OPERATIONAL_STATUS_VALUES = [
'active',
'inactive',
'provisional',
'seasonal',
'voided',
];
const BENCH_STATUS_VALUES = [
'not_applicable',
'unknown',
'is_missing',
'is_damaged',
'is_ok',
];
const DOCKING_BAY_TYPE_VALUES = [
'unknown',
'simple_interaction',
'cut_in_road_without_marks',
'cut_in_road_with_marks',
'island',
'peninsula',
];
const ELECTRICITY_STATUS_VALUES = [
'available',
'unavailable',
'unknown',
];
const FLAG_STATUS_VALUES = [
'not_applicable',
'unknown',
'is_missing',
'is_damaged',
'is_ok',
];
const LIGHTNING_STATUS_VALUES = [
'confortable',
'damaged',
'insuficient',
'moderate',
'unavailable',
'unknown',
];
const PAVEMENT_TYPE_VALUES = [
'asphalt',
'concrete',
'dirt',
'grass',
'gravel',
'portuguese_stones',
'unknown',
];
const POLE_STATUS_VALUES = [
'not_applicable',
'unknown',
'is_missing',
'is_damaged',
'is_ok',
];
const ROAD_TYPE_VALUES = [
'complementary_itinerary',
'highway',
'main_itinerary',
'national_road',
'regional_road',
'secondary_road',
'unknown',
];
const SHELTER_STATUS_VALUES = [
'not_applicable',
'unknown',
'is_missing',
'is_damaged',
'is_ok',
];
const SIDEWALK_TYPE_VALUES = [
'unknown',
'none',
'gutter',
'inaccessible',
'is_ok',
];
const CONNECTIONS_VALUES = [
'ferry',
'light_rail',
'subway',
'train',
'boat',
'airport',
'bike_sharing',
'bike_parking',
'car_parking',
];
const FACILITIES_VALUES = [
'fire_station',
'health_clinic',
'historic_building',
'hospital',
'police_station',
'school',
'shopping',
'transit_office',
'university',
'pip',
];
//
// Define schemas using constants
export const jurisdictionSchema = z.enum(JURISDICTION_VALUES).default('unknown');
export const operationalStatusSchema = z.enum(OPERATIONAL_STATUS_VALUES).default('inactive');
export const benchStatusSchema = z.enum(BENCH_STATUS_VALUES).default('unknown');
export const dockingBayTypeSchema = z.enum(DOCKING_BAY_TYPE_VALUES).default('unknown');
export const electricityStatusSchema = z.enum(ELECTRICITY_STATUS_VALUES).default('unknown');
export const flagStatusSchema = z.enum(FLAG_STATUS_VALUES).default('unknown');
export const lightningStatusSchema = z.enum(LIGHTNING_STATUS_VALUES).default('unknown');
export const pavementTypeSchema = z.enum(PAVEMENT_TYPE_VALUES).default('unknown');
export const poleStatusSchema = z.enum(POLE_STATUS_VALUES).default('unknown');
export const roadTypeSchema = z.enum(ROAD_TYPE_VALUES).default('unknown');
export const shelterStatusSchema = z.enum(SHELTER_STATUS_VALUES).default('unknown');
export const sidewalkTypeSchema = z.enum(SIDEWALK_TYPE_VALUES).default('unknown');
export const connectionsSchema = z.array(z.enum(CONNECTIONS_VALUES)).default([]);
export const facilitiesSchema = z.array(z.enum(FACILITIES_VALUES)).default([]);
export const commentSchema = z.array(CommentSchema).default([]);
export const StopSchema = DocumentSchema.extend({
//
// General
_id: z
.string()
.length(6),
is_archived: z
.boolean()
.default(false),
is_locked: z
.boolean()
.default(false),
jurisdiction: jurisdictionSchema,
name: z
.string(),
new_name: z
.string(),
operational_status: operationalStatusSchema,
short_name: z
.string()
.nullish(),
tts_name: z
.string()
.nullish(),
//
// Location
district_id: z
.string(),
latitude: z
.number(),
locality_id: z
.string()
.nullish(),
longitude: z
.number(),
municipality_id: z
.string(),
parish_id: z
.string()
.nullish(),
//
// Infrastructure
bench_status: benchStatusSchema,
docking_bay_type: dockingBayTypeSchema,
electricity_status: electricityStatusSchema,
flag_status: flagStatusSchema,
lighting_status: lightningStatusSchema,
pavement_type: pavementTypeSchema,
pole_status: poleStatusSchema,
road_type: roadTypeSchema,
shelter_code: z
.string()
.nullish(),
shelter_maintainer: z
.string()
.nullish(),
shelter_make: z
.string()
.nullish(),
shelter_model: z
.string()
.nullish(),
shelter_status: shelterStatusSchema,
sidewalk_type: sidewalkTypeSchema,
//
// Checks
last_infrastructure_check: unixTimeStampSchema.nullish(),
last_infrastructure_maintenance: unixTimeStampSchema.nullish(),
last_schedules_check: unixTimeStampSchema.nullish(),
last_schedules_maintenance: unixTimeStampSchema.nullish(),
last_shelter_installation: unixTimeStampSchema.nullish(),
//
// Facilities
connections: connectionsSchema,
facilities: facilitiesSchema,
//
// Images & Files
file_ids: z
.array(z.string())
.default([]),
image_ids: z
.array(z.string())
.default([]),
//
// Notes & Comments
comments: commentSchema,
observations: z
.string()
.nullish(),
}).strict();
export const CreateStopSchema = StopSchema
.omit({ created_at: true, updated_at: true });
export const UpdateStopSchema = StopSchema
.omit({ _id: true, created_at: true, updated_at: true })
.partial();
/* * */
export const StopPermissionSchema = z.object({
agency_ids: z.array(z.string()),
municipality_ids: z.array(z.string()),
});