/** * Compact Training Plan Zod Schema * * Runtime validation for compact training plans generated by AI models. */ import { z } from "zod"; export declare const SportSchema: z.ZodEnum<{ strength: "strength"; swim: "swim"; bike: "bike"; run: "run"; brick: "brick"; }>; export declare const FirstDayOfWeekSchema: z.ZodEnum<{ monday: "monday"; sunday: "sunday"; }>; export declare const DistanceUnitSchema: z.ZodEnum<{ km: "km"; mi: "mi"; }>; export declare const DayOfWeekSchema: z.ZodEnum<{ Mon: "Mon"; Tue: "Tue"; Wed: "Wed"; Thu: "Thu"; Fri: "Fri"; Sat: "Sat"; Sun: "Sun"; }>; /** * Pace string validation - formats like "5:30/km", "8:00/mi", "1:45/100m" */ export declare const PaceStringSchema: z.ZodString; /** * Duration string validation - formats like "30", "30min", "1:30", "90s" */ export declare const DurationStringSchema: z.ZodString; export declare const AthletePacesSchema: z.ZodObject<{ easy: z.ZodOptional; long: z.ZodOptional; tempo: z.ZodOptional; threshold: z.ZodOptional; marathon: z.ZodOptional; halfMarathon: z.ZodOptional; interval: z.ZodOptional; r200: z.ZodOptional; r400: z.ZodOptional; r800: z.ZodOptional; r1k: z.ZodOptional; rMile: z.ZodOptional; bikeFtp: z.ZodOptional; bikeEasy: z.ZodOptional; bikeTempo: z.ZodOptional; bikeThreshold: z.ZodOptional; swimCss: z.ZodOptional; swimEasy: z.ZodOptional; swimTempo: z.ZodOptional; }, z.core.$strip>; export declare const HRZoneConfigSchema: z.ZodObject<{ lthr: z.ZodNumber; maxHR: z.ZodOptional; restingHR: z.ZodOptional; }, z.core.$strip>; export declare const AthleteZonesSchema: z.ZodObject<{ hr: z.ZodOptional; restingHR: z.ZodOptional; }, z.core.$strip>>; }, z.core.$strip>; export declare const AthleteConstraintsSchema: z.ZodObject<{ daysPerWeek: z.ZodOptional>; preferredDays: z.ZodOptional>; maxLongRunHours: z.ZodOptional; maxLongBikeHours: z.ZodOptional; notes: z.ZodOptional>; }, z.core.$strip>; export declare const CompactAthleteSchema: z.ZodObject<{ name: z.ZodString; event: z.ZodString; eventDate: z.ZodString; startDate: z.ZodOptional; paces: z.ZodObject<{ easy: z.ZodOptional; long: z.ZodOptional; tempo: z.ZodOptional; threshold: z.ZodOptional; marathon: z.ZodOptional; halfMarathon: z.ZodOptional; interval: z.ZodOptional; r200: z.ZodOptional; r400: z.ZodOptional; r800: z.ZodOptional; r1k: z.ZodOptional; rMile: z.ZodOptional; bikeFtp: z.ZodOptional; bikeEasy: z.ZodOptional; bikeTempo: z.ZodOptional; bikeThreshold: z.ZodOptional; swimCss: z.ZodOptional; swimEasy: z.ZodOptional; swimTempo: z.ZodOptional; }, z.core.$strip>; zones: z.ZodOptional; restingHR: z.ZodOptional; }, z.core.$strip>>; }, z.core.$strip>>; constraints: z.ZodOptional>; preferredDays: z.ZodOptional>; maxLongRunHours: z.ZodOptional; maxLongBikeHours: z.ZodOptional; notes: z.ZodOptional>; }, z.core.$strip>>; unit: z.ZodDefault>; firstDayOfWeek: z.ZodDefault>; }, z.core.$strip>; /** * Week range can be "1-3" or [1, 2, 3] */ export declare const WeekRangeSchema: z.ZodUnion]>; export declare const CompactPhaseSchema: z.ZodObject<{ name: z.ZodString; weeks: z.ZodUnion]>; focus: z.ZodString; keyWorkouts: z.ZodOptional>; }, z.core.$strip>; /** * Workout reference validation. * Format: "template.id" or "template.id(param)" or "template.id(param1, param2)" */ export declare const WorkoutRefSchema: z.ZodString; /** * A day can have a single workout or multiple (for brick days). */ export declare const DayWorkoutSchema: z.ZodUnion]>; /** * Week schedule maps days to workouts. */ export declare const CompactWeekScheduleSchema: z.ZodRecord]>>; export declare const CompactWeekSchema: z.ZodObject<{ week: z.ZodNumber; phase: z.ZodString; focus: z.ZodOptional; isRecoveryWeek: z.ZodOptional; targetHours: z.ZodOptional; workouts: z.ZodRecord]>>; }, z.core.$strip>; export declare const CompactAssessmentEntrySchema: z.ZodObject<{ sport: z.ZodEnum<{ strength: "strength"; swim: "swim"; bike: "bike"; run: "run"; brick: "brick"; }>; evidence: z.ZodString; }, z.core.$strip>; export declare const CompactAssessmentSchema: z.ZodObject<{ foundation: z.ZodOptional>; peakTrainingLoad: z.ZodOptional; foundationLevel: z.ZodOptional>; yearsInSport: z.ZodOptional; }, z.core.$strip>>; currentForm: z.ZodOptional; swim: z.ZodOptional; bike: z.ZodOptional; run: z.ZodOptional; }, z.core.$strip>>; longestSessions: z.ZodOptional; bike: z.ZodOptional; run: z.ZodOptional; }, z.core.$strip>>; consistency: z.ZodOptional; }, z.core.$strip>>; strengths: z.ZodOptional; evidence: z.ZodString; }, z.core.$strip>>>; limiters: z.ZodOptional; evidence: z.ZodString; }, z.core.$strip>>>; constraints: z.ZodOptional>; }, z.core.$strip>; export declare const CompactRaceStrategySchema: z.ZodObject<{ goalTime: z.ZodOptional; pacing: z.ZodOptional; bike: z.ZodOptional; run: z.ZodOptional; }, z.core.$strip>>; nutrition: z.ZodOptional; notes: z.ZodOptional>; }, z.core.$strip>; export declare const CompactPlanSchema: z.ZodObject<{ version: z.ZodLiteral<"2.0">; athlete: z.ZodObject<{ name: z.ZodString; event: z.ZodString; eventDate: z.ZodString; startDate: z.ZodOptional; paces: z.ZodObject<{ easy: z.ZodOptional; long: z.ZodOptional; tempo: z.ZodOptional; threshold: z.ZodOptional; marathon: z.ZodOptional; halfMarathon: z.ZodOptional; interval: z.ZodOptional; r200: z.ZodOptional; r400: z.ZodOptional; r800: z.ZodOptional; r1k: z.ZodOptional; rMile: z.ZodOptional; bikeFtp: z.ZodOptional; bikeEasy: z.ZodOptional; bikeTempo: z.ZodOptional; bikeThreshold: z.ZodOptional; swimCss: z.ZodOptional; swimEasy: z.ZodOptional; swimTempo: z.ZodOptional; }, z.core.$strip>; zones: z.ZodOptional; restingHR: z.ZodOptional; }, z.core.$strip>>; }, z.core.$strip>>; constraints: z.ZodOptional>; preferredDays: z.ZodOptional>; maxLongRunHours: z.ZodOptional; maxLongBikeHours: z.ZodOptional; notes: z.ZodOptional>; }, z.core.$strip>>; unit: z.ZodDefault>; firstDayOfWeek: z.ZodDefault>; }, z.core.$strip>; assessment: z.ZodOptional>; peakTrainingLoad: z.ZodOptional; foundationLevel: z.ZodOptional>; yearsInSport: z.ZodOptional; }, z.core.$strip>>; currentForm: z.ZodOptional; swim: z.ZodOptional; bike: z.ZodOptional; run: z.ZodOptional; }, z.core.$strip>>; longestSessions: z.ZodOptional; bike: z.ZodOptional; run: z.ZodOptional; }, z.core.$strip>>; consistency: z.ZodOptional; }, z.core.$strip>>; strengths: z.ZodOptional; evidence: z.ZodString; }, z.core.$strip>>>; limiters: z.ZodOptional; evidence: z.ZodString; }, z.core.$strip>>>; constraints: z.ZodOptional>; }, z.core.$strip>>; phases: z.ZodArray]>; focus: z.ZodString; keyWorkouts: z.ZodOptional>; }, z.core.$strip>>; weeks: z.ZodArray; isRecoveryWeek: z.ZodOptional; targetHours: z.ZodOptional; workouts: z.ZodRecord]>>; }, z.core.$strip>>; raceStrategy: z.ZodOptional; pacing: z.ZodOptional; bike: z.ZodOptional; run: z.ZodOptional; }, z.core.$strip>>; nutrition: z.ZodOptional; notes: z.ZodOptional>; }, z.core.$strip>>; }, z.core.$strip>; export type CompactValidationResult = { success: true; data: z.infer; } | { success: false; errors: CompactValidationError[]; }; export interface CompactValidationError { path: string; message: string; code: string; } /** * Validate a compact training plan against the schema. */ export declare function validateCompactPlan(data: unknown): CompactValidationResult; /** * Validate a compact plan and throw an error if invalid. */ export declare function validateCompactPlanOrThrow(data: unknown): z.infer; /** * Format validation errors into a human-readable string. */ export declare function formatCompactValidationErrors(errors: CompactValidationError[]): string; export type CompactPlan = z.infer; export type CompactAthlete = z.infer; export type CompactPhase = z.infer; export type CompactWeek = z.infer; export type CompactWeekSchedule = z.infer; export type CompactRaceStrategy = z.infer; export type CompactAssessment = z.infer; export type CompactAssessmentEntry = z.infer; export type AthletePaces = z.infer; export type AthleteZones = z.infer; export type HRZoneConfig = z.infer;