endurance-coach 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/LICENSE.md +21 -0
  2. package/README.md +94 -0
  3. package/bin/claude-coach.js +10 -0
  4. package/dist/cli.d.ts +6 -0
  5. package/dist/cli.js +1077 -0
  6. package/dist/db/client.d.ts +8 -0
  7. package/dist/db/client.js +111 -0
  8. package/dist/db/migrate.d.ts +1 -0
  9. package/dist/db/migrate.js +14 -0
  10. package/dist/db/schema.sql +105 -0
  11. package/dist/index.d.ts +7 -0
  12. package/dist/index.js +13 -0
  13. package/dist/lib/config.d.ts +27 -0
  14. package/dist/lib/config.js +86 -0
  15. package/dist/lib/logging.d.ts +13 -0
  16. package/dist/lib/logging.js +28 -0
  17. package/dist/schema/training-plan.d.ts +288 -0
  18. package/dist/schema/training-plan.js +88 -0
  19. package/dist/schema/training-plan.schema.d.ts +1875 -0
  20. package/dist/schema/training-plan.schema.js +418 -0
  21. package/dist/strava/api.d.ts +5 -0
  22. package/dist/strava/api.js +63 -0
  23. package/dist/strava/oauth.d.ts +4 -0
  24. package/dist/strava/oauth.js +113 -0
  25. package/dist/strava/types.d.ts +46 -0
  26. package/dist/strava/types.js +1 -0
  27. package/dist/viewer/lib/UpdatePlan.d.ts +48 -0
  28. package/dist/viewer/lib/UpdatePlan.js +209 -0
  29. package/dist/viewer/lib/export/erg.d.ts +26 -0
  30. package/dist/viewer/lib/export/erg.js +208 -0
  31. package/dist/viewer/lib/export/fit.d.ts +25 -0
  32. package/dist/viewer/lib/export/fit.js +308 -0
  33. package/dist/viewer/lib/export/ics.d.ts +13 -0
  34. package/dist/viewer/lib/export/ics.js +142 -0
  35. package/dist/viewer/lib/export/index.d.ts +50 -0
  36. package/dist/viewer/lib/export/index.js +229 -0
  37. package/dist/viewer/lib/export/zwo.d.ts +21 -0
  38. package/dist/viewer/lib/export/zwo.js +233 -0
  39. package/dist/viewer/lib/utils.d.ts +14 -0
  40. package/dist/viewer/lib/utils.js +123 -0
  41. package/dist/viewer/main.d.ts +5 -0
  42. package/dist/viewer/main.js +6 -0
  43. package/dist/viewer/stores/changes.d.ts +21 -0
  44. package/dist/viewer/stores/changes.js +49 -0
  45. package/dist/viewer/stores/plan.d.ts +11 -0
  46. package/dist/viewer/stores/plan.js +40 -0
  47. package/dist/viewer/stores/settings.d.ts +53 -0
  48. package/dist/viewer/stores/settings.js +215 -0
  49. package/package.json +74 -0
  50. package/templates/plan-viewer.html +70 -0
@@ -0,0 +1,1875 @@
1
+ /**
2
+ * Training Plan Zod Schema
3
+ *
4
+ * Runtime validation schema that mirrors the TypeScript interfaces.
5
+ * Use this to validate JSON plans before rendering to HTML.
6
+ */
7
+ import { z } from "zod";
8
+ export declare const SportSchema: z.ZodEnum<{
9
+ swim: "swim";
10
+ bike: "bike";
11
+ run: "run";
12
+ strength: "strength";
13
+ brick: "brick";
14
+ race: "race";
15
+ rest: "rest";
16
+ }>;
17
+ export declare const WorkoutTypeSchema: z.ZodString;
18
+ export declare const IntensityUnitSchema: z.ZodEnum<{
19
+ percent_ftp: "percent_ftp";
20
+ percent_lthr: "percent_lthr";
21
+ hr_zone: "hr_zone";
22
+ pace_zone: "pace_zone";
23
+ rpe: "rpe";
24
+ css_offset: "css_offset";
25
+ }>;
26
+ export declare const DurationUnitSchema: z.ZodEnum<{
27
+ seconds: "seconds";
28
+ minutes: "minutes";
29
+ hours: "hours";
30
+ meters: "meters";
31
+ kilometers: "kilometers";
32
+ miles: "miles";
33
+ yards: "yards";
34
+ laps: "laps";
35
+ }>;
36
+ export declare const StepTypeSchema: z.ZodEnum<{
37
+ rest: "rest";
38
+ warmup: "warmup";
39
+ work: "work";
40
+ recovery: "recovery";
41
+ cooldown: "cooldown";
42
+ interval_set: "interval_set";
43
+ }>;
44
+ export declare const SwimDistanceUnitSchema: z.ZodEnum<{
45
+ meters: "meters";
46
+ yards: "yards";
47
+ }>;
48
+ export declare const LandDistanceUnitSchema: z.ZodEnum<{
49
+ kilometers: "kilometers";
50
+ miles: "miles";
51
+ }>;
52
+ export declare const FirstDayOfWeekSchema: z.ZodEnum<{
53
+ monday: "monday";
54
+ sunday: "sunday";
55
+ }>;
56
+ export declare const UnitPreferencesSchema: z.ZodObject<{
57
+ swim: z.ZodEnum<{
58
+ meters: "meters";
59
+ yards: "yards";
60
+ }>;
61
+ bike: z.ZodEnum<{
62
+ kilometers: "kilometers";
63
+ miles: "miles";
64
+ }>;
65
+ run: z.ZodEnum<{
66
+ kilometers: "kilometers";
67
+ miles: "miles";
68
+ }>;
69
+ firstDayOfWeek: z.ZodEnum<{
70
+ monday: "monday";
71
+ sunday: "sunday";
72
+ }>;
73
+ }, z.core.$strip>;
74
+ export declare const IntensityTargetSchema: z.ZodObject<{
75
+ unit: z.ZodEnum<{
76
+ percent_ftp: "percent_ftp";
77
+ percent_lthr: "percent_lthr";
78
+ hr_zone: "hr_zone";
79
+ pace_zone: "pace_zone";
80
+ rpe: "rpe";
81
+ css_offset: "css_offset";
82
+ }>;
83
+ value: z.ZodNumber;
84
+ valueLow: z.ZodOptional<z.ZodNumber>;
85
+ valueHigh: z.ZodOptional<z.ZodNumber>;
86
+ description: z.ZodOptional<z.ZodString>;
87
+ }, z.core.$strip>;
88
+ export declare const DurationTargetSchema: z.ZodObject<{
89
+ unit: z.ZodEnum<{
90
+ seconds: "seconds";
91
+ minutes: "minutes";
92
+ hours: "hours";
93
+ meters: "meters";
94
+ kilometers: "kilometers";
95
+ miles: "miles";
96
+ yards: "yards";
97
+ laps: "laps";
98
+ }>;
99
+ value: z.ZodNumber;
100
+ }, z.core.$strip>;
101
+ export declare const CadenceSchema: z.ZodObject<{
102
+ low: z.ZodNumber;
103
+ high: z.ZodNumber;
104
+ }, z.core.$strip>;
105
+ export declare const WorkoutStepSchema: z.ZodObject<{
106
+ type: z.ZodEnum<{
107
+ rest: "rest";
108
+ warmup: "warmup";
109
+ work: "work";
110
+ recovery: "recovery";
111
+ cooldown: "cooldown";
112
+ interval_set: "interval_set";
113
+ }>;
114
+ name: z.ZodOptional<z.ZodString>;
115
+ duration: z.ZodObject<{
116
+ unit: z.ZodEnum<{
117
+ seconds: "seconds";
118
+ minutes: "minutes";
119
+ hours: "hours";
120
+ meters: "meters";
121
+ kilometers: "kilometers";
122
+ miles: "miles";
123
+ yards: "yards";
124
+ laps: "laps";
125
+ }>;
126
+ value: z.ZodNumber;
127
+ }, z.core.$strip>;
128
+ intensity: z.ZodObject<{
129
+ unit: z.ZodEnum<{
130
+ percent_ftp: "percent_ftp";
131
+ percent_lthr: "percent_lthr";
132
+ hr_zone: "hr_zone";
133
+ pace_zone: "pace_zone";
134
+ rpe: "rpe";
135
+ css_offset: "css_offset";
136
+ }>;
137
+ value: z.ZodNumber;
138
+ valueLow: z.ZodOptional<z.ZodNumber>;
139
+ valueHigh: z.ZodOptional<z.ZodNumber>;
140
+ description: z.ZodOptional<z.ZodString>;
141
+ }, z.core.$strip>;
142
+ cadence: z.ZodOptional<z.ZodObject<{
143
+ low: z.ZodNumber;
144
+ high: z.ZodNumber;
145
+ }, z.core.$strip>>;
146
+ notes: z.ZodOptional<z.ZodString>;
147
+ }, z.core.$strip>;
148
+ export declare const IntervalSetSchema: z.ZodObject<{
149
+ type: z.ZodLiteral<"interval_set">;
150
+ name: z.ZodOptional<z.ZodString>;
151
+ repeats: z.ZodNumber;
152
+ steps: z.ZodArray<z.ZodObject<{
153
+ type: z.ZodEnum<{
154
+ rest: "rest";
155
+ warmup: "warmup";
156
+ work: "work";
157
+ recovery: "recovery";
158
+ cooldown: "cooldown";
159
+ interval_set: "interval_set";
160
+ }>;
161
+ name: z.ZodOptional<z.ZodString>;
162
+ duration: z.ZodObject<{
163
+ unit: z.ZodEnum<{
164
+ seconds: "seconds";
165
+ minutes: "minutes";
166
+ hours: "hours";
167
+ meters: "meters";
168
+ kilometers: "kilometers";
169
+ miles: "miles";
170
+ yards: "yards";
171
+ laps: "laps";
172
+ }>;
173
+ value: z.ZodNumber;
174
+ }, z.core.$strip>;
175
+ intensity: z.ZodObject<{
176
+ unit: z.ZodEnum<{
177
+ percent_ftp: "percent_ftp";
178
+ percent_lthr: "percent_lthr";
179
+ hr_zone: "hr_zone";
180
+ pace_zone: "pace_zone";
181
+ rpe: "rpe";
182
+ css_offset: "css_offset";
183
+ }>;
184
+ value: z.ZodNumber;
185
+ valueLow: z.ZodOptional<z.ZodNumber>;
186
+ valueHigh: z.ZodOptional<z.ZodNumber>;
187
+ description: z.ZodOptional<z.ZodString>;
188
+ }, z.core.$strip>;
189
+ cadence: z.ZodOptional<z.ZodObject<{
190
+ low: z.ZodNumber;
191
+ high: z.ZodNumber;
192
+ }, z.core.$strip>>;
193
+ notes: z.ZodOptional<z.ZodString>;
194
+ }, z.core.$strip>>;
195
+ }, z.core.$strip>;
196
+ export declare const StructuredWorkoutSchema: z.ZodObject<{
197
+ warmup: z.ZodOptional<z.ZodArray<z.ZodObject<{
198
+ type: z.ZodEnum<{
199
+ rest: "rest";
200
+ warmup: "warmup";
201
+ work: "work";
202
+ recovery: "recovery";
203
+ cooldown: "cooldown";
204
+ interval_set: "interval_set";
205
+ }>;
206
+ name: z.ZodOptional<z.ZodString>;
207
+ duration: z.ZodObject<{
208
+ unit: z.ZodEnum<{
209
+ seconds: "seconds";
210
+ minutes: "minutes";
211
+ hours: "hours";
212
+ meters: "meters";
213
+ kilometers: "kilometers";
214
+ miles: "miles";
215
+ yards: "yards";
216
+ laps: "laps";
217
+ }>;
218
+ value: z.ZodNumber;
219
+ }, z.core.$strip>;
220
+ intensity: z.ZodObject<{
221
+ unit: z.ZodEnum<{
222
+ percent_ftp: "percent_ftp";
223
+ percent_lthr: "percent_lthr";
224
+ hr_zone: "hr_zone";
225
+ pace_zone: "pace_zone";
226
+ rpe: "rpe";
227
+ css_offset: "css_offset";
228
+ }>;
229
+ value: z.ZodNumber;
230
+ valueLow: z.ZodOptional<z.ZodNumber>;
231
+ valueHigh: z.ZodOptional<z.ZodNumber>;
232
+ description: z.ZodOptional<z.ZodString>;
233
+ }, z.core.$strip>;
234
+ cadence: z.ZodOptional<z.ZodObject<{
235
+ low: z.ZodNumber;
236
+ high: z.ZodNumber;
237
+ }, z.core.$strip>>;
238
+ notes: z.ZodOptional<z.ZodString>;
239
+ }, z.core.$strip>>>;
240
+ main: z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
241
+ type: z.ZodEnum<{
242
+ rest: "rest";
243
+ warmup: "warmup";
244
+ work: "work";
245
+ recovery: "recovery";
246
+ cooldown: "cooldown";
247
+ interval_set: "interval_set";
248
+ }>;
249
+ name: z.ZodOptional<z.ZodString>;
250
+ duration: z.ZodObject<{
251
+ unit: z.ZodEnum<{
252
+ seconds: "seconds";
253
+ minutes: "minutes";
254
+ hours: "hours";
255
+ meters: "meters";
256
+ kilometers: "kilometers";
257
+ miles: "miles";
258
+ yards: "yards";
259
+ laps: "laps";
260
+ }>;
261
+ value: z.ZodNumber;
262
+ }, z.core.$strip>;
263
+ intensity: z.ZodObject<{
264
+ unit: z.ZodEnum<{
265
+ percent_ftp: "percent_ftp";
266
+ percent_lthr: "percent_lthr";
267
+ hr_zone: "hr_zone";
268
+ pace_zone: "pace_zone";
269
+ rpe: "rpe";
270
+ css_offset: "css_offset";
271
+ }>;
272
+ value: z.ZodNumber;
273
+ valueLow: z.ZodOptional<z.ZodNumber>;
274
+ valueHigh: z.ZodOptional<z.ZodNumber>;
275
+ description: z.ZodOptional<z.ZodString>;
276
+ }, z.core.$strip>;
277
+ cadence: z.ZodOptional<z.ZodObject<{
278
+ low: z.ZodNumber;
279
+ high: z.ZodNumber;
280
+ }, z.core.$strip>>;
281
+ notes: z.ZodOptional<z.ZodString>;
282
+ }, z.core.$strip>, z.ZodObject<{
283
+ type: z.ZodLiteral<"interval_set">;
284
+ name: z.ZodOptional<z.ZodString>;
285
+ repeats: z.ZodNumber;
286
+ steps: z.ZodArray<z.ZodObject<{
287
+ type: z.ZodEnum<{
288
+ rest: "rest";
289
+ warmup: "warmup";
290
+ work: "work";
291
+ recovery: "recovery";
292
+ cooldown: "cooldown";
293
+ interval_set: "interval_set";
294
+ }>;
295
+ name: z.ZodOptional<z.ZodString>;
296
+ duration: z.ZodObject<{
297
+ unit: z.ZodEnum<{
298
+ seconds: "seconds";
299
+ minutes: "minutes";
300
+ hours: "hours";
301
+ meters: "meters";
302
+ kilometers: "kilometers";
303
+ miles: "miles";
304
+ yards: "yards";
305
+ laps: "laps";
306
+ }>;
307
+ value: z.ZodNumber;
308
+ }, z.core.$strip>;
309
+ intensity: z.ZodObject<{
310
+ unit: z.ZodEnum<{
311
+ percent_ftp: "percent_ftp";
312
+ percent_lthr: "percent_lthr";
313
+ hr_zone: "hr_zone";
314
+ pace_zone: "pace_zone";
315
+ rpe: "rpe";
316
+ css_offset: "css_offset";
317
+ }>;
318
+ value: z.ZodNumber;
319
+ valueLow: z.ZodOptional<z.ZodNumber>;
320
+ valueHigh: z.ZodOptional<z.ZodNumber>;
321
+ description: z.ZodOptional<z.ZodString>;
322
+ }, z.core.$strip>;
323
+ cadence: z.ZodOptional<z.ZodObject<{
324
+ low: z.ZodNumber;
325
+ high: z.ZodNumber;
326
+ }, z.core.$strip>>;
327
+ notes: z.ZodOptional<z.ZodString>;
328
+ }, z.core.$strip>>;
329
+ }, z.core.$strip>]>>;
330
+ cooldown: z.ZodOptional<z.ZodArray<z.ZodObject<{
331
+ type: z.ZodEnum<{
332
+ rest: "rest";
333
+ warmup: "warmup";
334
+ work: "work";
335
+ recovery: "recovery";
336
+ cooldown: "cooldown";
337
+ interval_set: "interval_set";
338
+ }>;
339
+ name: z.ZodOptional<z.ZodString>;
340
+ duration: z.ZodObject<{
341
+ unit: z.ZodEnum<{
342
+ seconds: "seconds";
343
+ minutes: "minutes";
344
+ hours: "hours";
345
+ meters: "meters";
346
+ kilometers: "kilometers";
347
+ miles: "miles";
348
+ yards: "yards";
349
+ laps: "laps";
350
+ }>;
351
+ value: z.ZodNumber;
352
+ }, z.core.$strip>;
353
+ intensity: z.ZodObject<{
354
+ unit: z.ZodEnum<{
355
+ percent_ftp: "percent_ftp";
356
+ percent_lthr: "percent_lthr";
357
+ hr_zone: "hr_zone";
358
+ pace_zone: "pace_zone";
359
+ rpe: "rpe";
360
+ css_offset: "css_offset";
361
+ }>;
362
+ value: z.ZodNumber;
363
+ valueLow: z.ZodOptional<z.ZodNumber>;
364
+ valueHigh: z.ZodOptional<z.ZodNumber>;
365
+ description: z.ZodOptional<z.ZodString>;
366
+ }, z.core.$strip>;
367
+ cadence: z.ZodOptional<z.ZodObject<{
368
+ low: z.ZodNumber;
369
+ high: z.ZodNumber;
370
+ }, z.core.$strip>>;
371
+ notes: z.ZodOptional<z.ZodString>;
372
+ }, z.core.$strip>>>;
373
+ totalDuration: z.ZodOptional<z.ZodObject<{
374
+ unit: z.ZodEnum<{
375
+ seconds: "seconds";
376
+ minutes: "minutes";
377
+ hours: "hours";
378
+ meters: "meters";
379
+ kilometers: "kilometers";
380
+ miles: "miles";
381
+ yards: "yards";
382
+ laps: "laps";
383
+ }>;
384
+ value: z.ZodNumber;
385
+ }, z.core.$strip>>;
386
+ estimatedTSS: z.ZodOptional<z.ZodNumber>;
387
+ estimatedIF: z.ZodOptional<z.ZodNumber>;
388
+ }, z.core.$strip>;
389
+ export declare const HRRangeSchema: z.ZodObject<{
390
+ low: z.ZodNumber;
391
+ high: z.ZodNumber;
392
+ }, z.core.$strip>;
393
+ export declare const PowerRangeSchema: z.ZodUnion<readonly [z.ZodObject<{
394
+ low: z.ZodNumber;
395
+ high: z.ZodNumber;
396
+ }, z.core.$strip>, z.ZodString]>;
397
+ export declare const PaceRangeSchema: z.ZodObject<{
398
+ low: z.ZodString;
399
+ high: z.ZodString;
400
+ }, z.core.$strip>;
401
+ export declare const WorkoutSchema: z.ZodObject<{
402
+ id: z.ZodString;
403
+ sport: z.ZodEnum<{
404
+ swim: "swim";
405
+ bike: "bike";
406
+ run: "run";
407
+ strength: "strength";
408
+ brick: "brick";
409
+ race: "race";
410
+ rest: "rest";
411
+ }>;
412
+ type: z.ZodString;
413
+ name: z.ZodString;
414
+ description: z.ZodOptional<z.ZodString>;
415
+ durationMinutes: z.ZodOptional<z.ZodNumber>;
416
+ distanceMeters: z.ZodOptional<z.ZodNumber>;
417
+ distanceKm: z.ZodOptional<z.ZodNumber>;
418
+ primaryZone: z.ZodOptional<z.ZodString>;
419
+ targetHR: z.ZodOptional<z.ZodObject<{
420
+ low: z.ZodNumber;
421
+ high: z.ZodNumber;
422
+ }, z.core.$strip>>;
423
+ targetPower: z.ZodOptional<z.ZodUnion<readonly [z.ZodObject<{
424
+ low: z.ZodNumber;
425
+ high: z.ZodNumber;
426
+ }, z.core.$strip>, z.ZodString]>>;
427
+ targetPace: z.ZodOptional<z.ZodObject<{
428
+ low: z.ZodString;
429
+ high: z.ZodString;
430
+ }, z.core.$strip>>;
431
+ rpe: z.ZodOptional<z.ZodNumber>;
432
+ structure: z.ZodOptional<z.ZodObject<{
433
+ warmup: z.ZodOptional<z.ZodArray<z.ZodObject<{
434
+ type: z.ZodEnum<{
435
+ rest: "rest";
436
+ warmup: "warmup";
437
+ work: "work";
438
+ recovery: "recovery";
439
+ cooldown: "cooldown";
440
+ interval_set: "interval_set";
441
+ }>;
442
+ name: z.ZodOptional<z.ZodString>;
443
+ duration: z.ZodObject<{
444
+ unit: z.ZodEnum<{
445
+ seconds: "seconds";
446
+ minutes: "minutes";
447
+ hours: "hours";
448
+ meters: "meters";
449
+ kilometers: "kilometers";
450
+ miles: "miles";
451
+ yards: "yards";
452
+ laps: "laps";
453
+ }>;
454
+ value: z.ZodNumber;
455
+ }, z.core.$strip>;
456
+ intensity: z.ZodObject<{
457
+ unit: z.ZodEnum<{
458
+ percent_ftp: "percent_ftp";
459
+ percent_lthr: "percent_lthr";
460
+ hr_zone: "hr_zone";
461
+ pace_zone: "pace_zone";
462
+ rpe: "rpe";
463
+ css_offset: "css_offset";
464
+ }>;
465
+ value: z.ZodNumber;
466
+ valueLow: z.ZodOptional<z.ZodNumber>;
467
+ valueHigh: z.ZodOptional<z.ZodNumber>;
468
+ description: z.ZodOptional<z.ZodString>;
469
+ }, z.core.$strip>;
470
+ cadence: z.ZodOptional<z.ZodObject<{
471
+ low: z.ZodNumber;
472
+ high: z.ZodNumber;
473
+ }, z.core.$strip>>;
474
+ notes: z.ZodOptional<z.ZodString>;
475
+ }, z.core.$strip>>>;
476
+ main: z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
477
+ type: z.ZodEnum<{
478
+ rest: "rest";
479
+ warmup: "warmup";
480
+ work: "work";
481
+ recovery: "recovery";
482
+ cooldown: "cooldown";
483
+ interval_set: "interval_set";
484
+ }>;
485
+ name: z.ZodOptional<z.ZodString>;
486
+ duration: z.ZodObject<{
487
+ unit: z.ZodEnum<{
488
+ seconds: "seconds";
489
+ minutes: "minutes";
490
+ hours: "hours";
491
+ meters: "meters";
492
+ kilometers: "kilometers";
493
+ miles: "miles";
494
+ yards: "yards";
495
+ laps: "laps";
496
+ }>;
497
+ value: z.ZodNumber;
498
+ }, z.core.$strip>;
499
+ intensity: z.ZodObject<{
500
+ unit: z.ZodEnum<{
501
+ percent_ftp: "percent_ftp";
502
+ percent_lthr: "percent_lthr";
503
+ hr_zone: "hr_zone";
504
+ pace_zone: "pace_zone";
505
+ rpe: "rpe";
506
+ css_offset: "css_offset";
507
+ }>;
508
+ value: z.ZodNumber;
509
+ valueLow: z.ZodOptional<z.ZodNumber>;
510
+ valueHigh: z.ZodOptional<z.ZodNumber>;
511
+ description: z.ZodOptional<z.ZodString>;
512
+ }, z.core.$strip>;
513
+ cadence: z.ZodOptional<z.ZodObject<{
514
+ low: z.ZodNumber;
515
+ high: z.ZodNumber;
516
+ }, z.core.$strip>>;
517
+ notes: z.ZodOptional<z.ZodString>;
518
+ }, z.core.$strip>, z.ZodObject<{
519
+ type: z.ZodLiteral<"interval_set">;
520
+ name: z.ZodOptional<z.ZodString>;
521
+ repeats: z.ZodNumber;
522
+ steps: z.ZodArray<z.ZodObject<{
523
+ type: z.ZodEnum<{
524
+ rest: "rest";
525
+ warmup: "warmup";
526
+ work: "work";
527
+ recovery: "recovery";
528
+ cooldown: "cooldown";
529
+ interval_set: "interval_set";
530
+ }>;
531
+ name: z.ZodOptional<z.ZodString>;
532
+ duration: z.ZodObject<{
533
+ unit: z.ZodEnum<{
534
+ seconds: "seconds";
535
+ minutes: "minutes";
536
+ hours: "hours";
537
+ meters: "meters";
538
+ kilometers: "kilometers";
539
+ miles: "miles";
540
+ yards: "yards";
541
+ laps: "laps";
542
+ }>;
543
+ value: z.ZodNumber;
544
+ }, z.core.$strip>;
545
+ intensity: z.ZodObject<{
546
+ unit: z.ZodEnum<{
547
+ percent_ftp: "percent_ftp";
548
+ percent_lthr: "percent_lthr";
549
+ hr_zone: "hr_zone";
550
+ pace_zone: "pace_zone";
551
+ rpe: "rpe";
552
+ css_offset: "css_offset";
553
+ }>;
554
+ value: z.ZodNumber;
555
+ valueLow: z.ZodOptional<z.ZodNumber>;
556
+ valueHigh: z.ZodOptional<z.ZodNumber>;
557
+ description: z.ZodOptional<z.ZodString>;
558
+ }, z.core.$strip>;
559
+ cadence: z.ZodOptional<z.ZodObject<{
560
+ low: z.ZodNumber;
561
+ high: z.ZodNumber;
562
+ }, z.core.$strip>>;
563
+ notes: z.ZodOptional<z.ZodString>;
564
+ }, z.core.$strip>>;
565
+ }, z.core.$strip>]>>;
566
+ cooldown: z.ZodOptional<z.ZodArray<z.ZodObject<{
567
+ type: z.ZodEnum<{
568
+ rest: "rest";
569
+ warmup: "warmup";
570
+ work: "work";
571
+ recovery: "recovery";
572
+ cooldown: "cooldown";
573
+ interval_set: "interval_set";
574
+ }>;
575
+ name: z.ZodOptional<z.ZodString>;
576
+ duration: z.ZodObject<{
577
+ unit: z.ZodEnum<{
578
+ seconds: "seconds";
579
+ minutes: "minutes";
580
+ hours: "hours";
581
+ meters: "meters";
582
+ kilometers: "kilometers";
583
+ miles: "miles";
584
+ yards: "yards";
585
+ laps: "laps";
586
+ }>;
587
+ value: z.ZodNumber;
588
+ }, z.core.$strip>;
589
+ intensity: z.ZodObject<{
590
+ unit: z.ZodEnum<{
591
+ percent_ftp: "percent_ftp";
592
+ percent_lthr: "percent_lthr";
593
+ hr_zone: "hr_zone";
594
+ pace_zone: "pace_zone";
595
+ rpe: "rpe";
596
+ css_offset: "css_offset";
597
+ }>;
598
+ value: z.ZodNumber;
599
+ valueLow: z.ZodOptional<z.ZodNumber>;
600
+ valueHigh: z.ZodOptional<z.ZodNumber>;
601
+ description: z.ZodOptional<z.ZodString>;
602
+ }, z.core.$strip>;
603
+ cadence: z.ZodOptional<z.ZodObject<{
604
+ low: z.ZodNumber;
605
+ high: z.ZodNumber;
606
+ }, z.core.$strip>>;
607
+ notes: z.ZodOptional<z.ZodString>;
608
+ }, z.core.$strip>>>;
609
+ totalDuration: z.ZodOptional<z.ZodObject<{
610
+ unit: z.ZodEnum<{
611
+ seconds: "seconds";
612
+ minutes: "minutes";
613
+ hours: "hours";
614
+ meters: "meters";
615
+ kilometers: "kilometers";
616
+ miles: "miles";
617
+ yards: "yards";
618
+ laps: "laps";
619
+ }>;
620
+ value: z.ZodNumber;
621
+ }, z.core.$strip>>;
622
+ estimatedTSS: z.ZodOptional<z.ZodNumber>;
623
+ estimatedIF: z.ZodOptional<z.ZodNumber>;
624
+ }, z.core.$strip>>;
625
+ humanReadable: z.ZodOptional<z.ZodString>;
626
+ completed: z.ZodBoolean;
627
+ completedAt: z.ZodOptional<z.ZodString>;
628
+ actualDuration: z.ZodOptional<z.ZodNumber>;
629
+ actualDistance: z.ZodOptional<z.ZodNumber>;
630
+ notes: z.ZodOptional<z.ZodString>;
631
+ }, z.core.$strip>;
632
+ export declare const TrainingDaySchema: z.ZodObject<{
633
+ date: z.ZodString;
634
+ dayOfWeek: z.ZodString;
635
+ workouts: z.ZodArray<z.ZodObject<{
636
+ id: z.ZodString;
637
+ sport: z.ZodEnum<{
638
+ swim: "swim";
639
+ bike: "bike";
640
+ run: "run";
641
+ strength: "strength";
642
+ brick: "brick";
643
+ race: "race";
644
+ rest: "rest";
645
+ }>;
646
+ type: z.ZodString;
647
+ name: z.ZodString;
648
+ description: z.ZodOptional<z.ZodString>;
649
+ durationMinutes: z.ZodOptional<z.ZodNumber>;
650
+ distanceMeters: z.ZodOptional<z.ZodNumber>;
651
+ distanceKm: z.ZodOptional<z.ZodNumber>;
652
+ primaryZone: z.ZodOptional<z.ZodString>;
653
+ targetHR: z.ZodOptional<z.ZodObject<{
654
+ low: z.ZodNumber;
655
+ high: z.ZodNumber;
656
+ }, z.core.$strip>>;
657
+ targetPower: z.ZodOptional<z.ZodUnion<readonly [z.ZodObject<{
658
+ low: z.ZodNumber;
659
+ high: z.ZodNumber;
660
+ }, z.core.$strip>, z.ZodString]>>;
661
+ targetPace: z.ZodOptional<z.ZodObject<{
662
+ low: z.ZodString;
663
+ high: z.ZodString;
664
+ }, z.core.$strip>>;
665
+ rpe: z.ZodOptional<z.ZodNumber>;
666
+ structure: z.ZodOptional<z.ZodObject<{
667
+ warmup: z.ZodOptional<z.ZodArray<z.ZodObject<{
668
+ type: z.ZodEnum<{
669
+ rest: "rest";
670
+ warmup: "warmup";
671
+ work: "work";
672
+ recovery: "recovery";
673
+ cooldown: "cooldown";
674
+ interval_set: "interval_set";
675
+ }>;
676
+ name: z.ZodOptional<z.ZodString>;
677
+ duration: z.ZodObject<{
678
+ unit: z.ZodEnum<{
679
+ seconds: "seconds";
680
+ minutes: "minutes";
681
+ hours: "hours";
682
+ meters: "meters";
683
+ kilometers: "kilometers";
684
+ miles: "miles";
685
+ yards: "yards";
686
+ laps: "laps";
687
+ }>;
688
+ value: z.ZodNumber;
689
+ }, z.core.$strip>;
690
+ intensity: z.ZodObject<{
691
+ unit: z.ZodEnum<{
692
+ percent_ftp: "percent_ftp";
693
+ percent_lthr: "percent_lthr";
694
+ hr_zone: "hr_zone";
695
+ pace_zone: "pace_zone";
696
+ rpe: "rpe";
697
+ css_offset: "css_offset";
698
+ }>;
699
+ value: z.ZodNumber;
700
+ valueLow: z.ZodOptional<z.ZodNumber>;
701
+ valueHigh: z.ZodOptional<z.ZodNumber>;
702
+ description: z.ZodOptional<z.ZodString>;
703
+ }, z.core.$strip>;
704
+ cadence: z.ZodOptional<z.ZodObject<{
705
+ low: z.ZodNumber;
706
+ high: z.ZodNumber;
707
+ }, z.core.$strip>>;
708
+ notes: z.ZodOptional<z.ZodString>;
709
+ }, z.core.$strip>>>;
710
+ main: z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
711
+ type: z.ZodEnum<{
712
+ rest: "rest";
713
+ warmup: "warmup";
714
+ work: "work";
715
+ recovery: "recovery";
716
+ cooldown: "cooldown";
717
+ interval_set: "interval_set";
718
+ }>;
719
+ name: z.ZodOptional<z.ZodString>;
720
+ duration: z.ZodObject<{
721
+ unit: z.ZodEnum<{
722
+ seconds: "seconds";
723
+ minutes: "minutes";
724
+ hours: "hours";
725
+ meters: "meters";
726
+ kilometers: "kilometers";
727
+ miles: "miles";
728
+ yards: "yards";
729
+ laps: "laps";
730
+ }>;
731
+ value: z.ZodNumber;
732
+ }, z.core.$strip>;
733
+ intensity: z.ZodObject<{
734
+ unit: z.ZodEnum<{
735
+ percent_ftp: "percent_ftp";
736
+ percent_lthr: "percent_lthr";
737
+ hr_zone: "hr_zone";
738
+ pace_zone: "pace_zone";
739
+ rpe: "rpe";
740
+ css_offset: "css_offset";
741
+ }>;
742
+ value: z.ZodNumber;
743
+ valueLow: z.ZodOptional<z.ZodNumber>;
744
+ valueHigh: z.ZodOptional<z.ZodNumber>;
745
+ description: z.ZodOptional<z.ZodString>;
746
+ }, z.core.$strip>;
747
+ cadence: z.ZodOptional<z.ZodObject<{
748
+ low: z.ZodNumber;
749
+ high: z.ZodNumber;
750
+ }, z.core.$strip>>;
751
+ notes: z.ZodOptional<z.ZodString>;
752
+ }, z.core.$strip>, z.ZodObject<{
753
+ type: z.ZodLiteral<"interval_set">;
754
+ name: z.ZodOptional<z.ZodString>;
755
+ repeats: z.ZodNumber;
756
+ steps: z.ZodArray<z.ZodObject<{
757
+ type: z.ZodEnum<{
758
+ rest: "rest";
759
+ warmup: "warmup";
760
+ work: "work";
761
+ recovery: "recovery";
762
+ cooldown: "cooldown";
763
+ interval_set: "interval_set";
764
+ }>;
765
+ name: z.ZodOptional<z.ZodString>;
766
+ duration: z.ZodObject<{
767
+ unit: z.ZodEnum<{
768
+ seconds: "seconds";
769
+ minutes: "minutes";
770
+ hours: "hours";
771
+ meters: "meters";
772
+ kilometers: "kilometers";
773
+ miles: "miles";
774
+ yards: "yards";
775
+ laps: "laps";
776
+ }>;
777
+ value: z.ZodNumber;
778
+ }, z.core.$strip>;
779
+ intensity: z.ZodObject<{
780
+ unit: z.ZodEnum<{
781
+ percent_ftp: "percent_ftp";
782
+ percent_lthr: "percent_lthr";
783
+ hr_zone: "hr_zone";
784
+ pace_zone: "pace_zone";
785
+ rpe: "rpe";
786
+ css_offset: "css_offset";
787
+ }>;
788
+ value: z.ZodNumber;
789
+ valueLow: z.ZodOptional<z.ZodNumber>;
790
+ valueHigh: z.ZodOptional<z.ZodNumber>;
791
+ description: z.ZodOptional<z.ZodString>;
792
+ }, z.core.$strip>;
793
+ cadence: z.ZodOptional<z.ZodObject<{
794
+ low: z.ZodNumber;
795
+ high: z.ZodNumber;
796
+ }, z.core.$strip>>;
797
+ notes: z.ZodOptional<z.ZodString>;
798
+ }, z.core.$strip>>;
799
+ }, z.core.$strip>]>>;
800
+ cooldown: z.ZodOptional<z.ZodArray<z.ZodObject<{
801
+ type: z.ZodEnum<{
802
+ rest: "rest";
803
+ warmup: "warmup";
804
+ work: "work";
805
+ recovery: "recovery";
806
+ cooldown: "cooldown";
807
+ interval_set: "interval_set";
808
+ }>;
809
+ name: z.ZodOptional<z.ZodString>;
810
+ duration: z.ZodObject<{
811
+ unit: z.ZodEnum<{
812
+ seconds: "seconds";
813
+ minutes: "minutes";
814
+ hours: "hours";
815
+ meters: "meters";
816
+ kilometers: "kilometers";
817
+ miles: "miles";
818
+ yards: "yards";
819
+ laps: "laps";
820
+ }>;
821
+ value: z.ZodNumber;
822
+ }, z.core.$strip>;
823
+ intensity: z.ZodObject<{
824
+ unit: z.ZodEnum<{
825
+ percent_ftp: "percent_ftp";
826
+ percent_lthr: "percent_lthr";
827
+ hr_zone: "hr_zone";
828
+ pace_zone: "pace_zone";
829
+ rpe: "rpe";
830
+ css_offset: "css_offset";
831
+ }>;
832
+ value: z.ZodNumber;
833
+ valueLow: z.ZodOptional<z.ZodNumber>;
834
+ valueHigh: z.ZodOptional<z.ZodNumber>;
835
+ description: z.ZodOptional<z.ZodString>;
836
+ }, z.core.$strip>;
837
+ cadence: z.ZodOptional<z.ZodObject<{
838
+ low: z.ZodNumber;
839
+ high: z.ZodNumber;
840
+ }, z.core.$strip>>;
841
+ notes: z.ZodOptional<z.ZodString>;
842
+ }, z.core.$strip>>>;
843
+ totalDuration: z.ZodOptional<z.ZodObject<{
844
+ unit: z.ZodEnum<{
845
+ seconds: "seconds";
846
+ minutes: "minutes";
847
+ hours: "hours";
848
+ meters: "meters";
849
+ kilometers: "kilometers";
850
+ miles: "miles";
851
+ yards: "yards";
852
+ laps: "laps";
853
+ }>;
854
+ value: z.ZodNumber;
855
+ }, z.core.$strip>>;
856
+ estimatedTSS: z.ZodOptional<z.ZodNumber>;
857
+ estimatedIF: z.ZodOptional<z.ZodNumber>;
858
+ }, z.core.$strip>>;
859
+ humanReadable: z.ZodOptional<z.ZodString>;
860
+ completed: z.ZodBoolean;
861
+ completedAt: z.ZodOptional<z.ZodString>;
862
+ actualDuration: z.ZodOptional<z.ZodNumber>;
863
+ actualDistance: z.ZodOptional<z.ZodNumber>;
864
+ notes: z.ZodOptional<z.ZodString>;
865
+ }, z.core.$strip>>;
866
+ }, z.core.$strip>;
867
+ export declare const SportSummarySchema: z.ZodObject<{
868
+ sessions: z.ZodNumber;
869
+ hours: z.ZodOptional<z.ZodNumber>;
870
+ km: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>>;
871
+ meters: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>>;
872
+ }, z.core.$strip>;
873
+ export declare const WeekSummarySchema: z.ZodObject<{
874
+ totalHours: z.ZodNumber;
875
+ totalTSS: z.ZodOptional<z.ZodNumber>;
876
+ bySport: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
877
+ sessions: z.ZodNumber;
878
+ hours: z.ZodOptional<z.ZodNumber>;
879
+ km: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>>;
880
+ meters: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>>;
881
+ }, z.core.$strip>>>;
882
+ }, z.core.$strip>;
883
+ export declare const TrainingWeekSchema: z.ZodObject<{
884
+ weekNumber: z.ZodNumber;
885
+ startDate: z.ZodString;
886
+ endDate: z.ZodString;
887
+ phase: z.ZodString;
888
+ focus: z.ZodString;
889
+ targetHours: z.ZodNumber;
890
+ days: z.ZodArray<z.ZodObject<{
891
+ date: z.ZodString;
892
+ dayOfWeek: z.ZodString;
893
+ workouts: z.ZodArray<z.ZodObject<{
894
+ id: z.ZodString;
895
+ sport: z.ZodEnum<{
896
+ swim: "swim";
897
+ bike: "bike";
898
+ run: "run";
899
+ strength: "strength";
900
+ brick: "brick";
901
+ race: "race";
902
+ rest: "rest";
903
+ }>;
904
+ type: z.ZodString;
905
+ name: z.ZodString;
906
+ description: z.ZodOptional<z.ZodString>;
907
+ durationMinutes: z.ZodOptional<z.ZodNumber>;
908
+ distanceMeters: z.ZodOptional<z.ZodNumber>;
909
+ distanceKm: z.ZodOptional<z.ZodNumber>;
910
+ primaryZone: z.ZodOptional<z.ZodString>;
911
+ targetHR: z.ZodOptional<z.ZodObject<{
912
+ low: z.ZodNumber;
913
+ high: z.ZodNumber;
914
+ }, z.core.$strip>>;
915
+ targetPower: z.ZodOptional<z.ZodUnion<readonly [z.ZodObject<{
916
+ low: z.ZodNumber;
917
+ high: z.ZodNumber;
918
+ }, z.core.$strip>, z.ZodString]>>;
919
+ targetPace: z.ZodOptional<z.ZodObject<{
920
+ low: z.ZodString;
921
+ high: z.ZodString;
922
+ }, z.core.$strip>>;
923
+ rpe: z.ZodOptional<z.ZodNumber>;
924
+ structure: z.ZodOptional<z.ZodObject<{
925
+ warmup: z.ZodOptional<z.ZodArray<z.ZodObject<{
926
+ type: z.ZodEnum<{
927
+ rest: "rest";
928
+ warmup: "warmup";
929
+ work: "work";
930
+ recovery: "recovery";
931
+ cooldown: "cooldown";
932
+ interval_set: "interval_set";
933
+ }>;
934
+ name: z.ZodOptional<z.ZodString>;
935
+ duration: z.ZodObject<{
936
+ unit: z.ZodEnum<{
937
+ seconds: "seconds";
938
+ minutes: "minutes";
939
+ hours: "hours";
940
+ meters: "meters";
941
+ kilometers: "kilometers";
942
+ miles: "miles";
943
+ yards: "yards";
944
+ laps: "laps";
945
+ }>;
946
+ value: z.ZodNumber;
947
+ }, z.core.$strip>;
948
+ intensity: z.ZodObject<{
949
+ unit: z.ZodEnum<{
950
+ percent_ftp: "percent_ftp";
951
+ percent_lthr: "percent_lthr";
952
+ hr_zone: "hr_zone";
953
+ pace_zone: "pace_zone";
954
+ rpe: "rpe";
955
+ css_offset: "css_offset";
956
+ }>;
957
+ value: z.ZodNumber;
958
+ valueLow: z.ZodOptional<z.ZodNumber>;
959
+ valueHigh: z.ZodOptional<z.ZodNumber>;
960
+ description: z.ZodOptional<z.ZodString>;
961
+ }, z.core.$strip>;
962
+ cadence: z.ZodOptional<z.ZodObject<{
963
+ low: z.ZodNumber;
964
+ high: z.ZodNumber;
965
+ }, z.core.$strip>>;
966
+ notes: z.ZodOptional<z.ZodString>;
967
+ }, z.core.$strip>>>;
968
+ main: z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
969
+ type: z.ZodEnum<{
970
+ rest: "rest";
971
+ warmup: "warmup";
972
+ work: "work";
973
+ recovery: "recovery";
974
+ cooldown: "cooldown";
975
+ interval_set: "interval_set";
976
+ }>;
977
+ name: z.ZodOptional<z.ZodString>;
978
+ duration: z.ZodObject<{
979
+ unit: z.ZodEnum<{
980
+ seconds: "seconds";
981
+ minutes: "minutes";
982
+ hours: "hours";
983
+ meters: "meters";
984
+ kilometers: "kilometers";
985
+ miles: "miles";
986
+ yards: "yards";
987
+ laps: "laps";
988
+ }>;
989
+ value: z.ZodNumber;
990
+ }, z.core.$strip>;
991
+ intensity: z.ZodObject<{
992
+ unit: z.ZodEnum<{
993
+ percent_ftp: "percent_ftp";
994
+ percent_lthr: "percent_lthr";
995
+ hr_zone: "hr_zone";
996
+ pace_zone: "pace_zone";
997
+ rpe: "rpe";
998
+ css_offset: "css_offset";
999
+ }>;
1000
+ value: z.ZodNumber;
1001
+ valueLow: z.ZodOptional<z.ZodNumber>;
1002
+ valueHigh: z.ZodOptional<z.ZodNumber>;
1003
+ description: z.ZodOptional<z.ZodString>;
1004
+ }, z.core.$strip>;
1005
+ cadence: z.ZodOptional<z.ZodObject<{
1006
+ low: z.ZodNumber;
1007
+ high: z.ZodNumber;
1008
+ }, z.core.$strip>>;
1009
+ notes: z.ZodOptional<z.ZodString>;
1010
+ }, z.core.$strip>, z.ZodObject<{
1011
+ type: z.ZodLiteral<"interval_set">;
1012
+ name: z.ZodOptional<z.ZodString>;
1013
+ repeats: z.ZodNumber;
1014
+ steps: z.ZodArray<z.ZodObject<{
1015
+ type: z.ZodEnum<{
1016
+ rest: "rest";
1017
+ warmup: "warmup";
1018
+ work: "work";
1019
+ recovery: "recovery";
1020
+ cooldown: "cooldown";
1021
+ interval_set: "interval_set";
1022
+ }>;
1023
+ name: z.ZodOptional<z.ZodString>;
1024
+ duration: z.ZodObject<{
1025
+ unit: z.ZodEnum<{
1026
+ seconds: "seconds";
1027
+ minutes: "minutes";
1028
+ hours: "hours";
1029
+ meters: "meters";
1030
+ kilometers: "kilometers";
1031
+ miles: "miles";
1032
+ yards: "yards";
1033
+ laps: "laps";
1034
+ }>;
1035
+ value: z.ZodNumber;
1036
+ }, z.core.$strip>;
1037
+ intensity: z.ZodObject<{
1038
+ unit: z.ZodEnum<{
1039
+ percent_ftp: "percent_ftp";
1040
+ percent_lthr: "percent_lthr";
1041
+ hr_zone: "hr_zone";
1042
+ pace_zone: "pace_zone";
1043
+ rpe: "rpe";
1044
+ css_offset: "css_offset";
1045
+ }>;
1046
+ value: z.ZodNumber;
1047
+ valueLow: z.ZodOptional<z.ZodNumber>;
1048
+ valueHigh: z.ZodOptional<z.ZodNumber>;
1049
+ description: z.ZodOptional<z.ZodString>;
1050
+ }, z.core.$strip>;
1051
+ cadence: z.ZodOptional<z.ZodObject<{
1052
+ low: z.ZodNumber;
1053
+ high: z.ZodNumber;
1054
+ }, z.core.$strip>>;
1055
+ notes: z.ZodOptional<z.ZodString>;
1056
+ }, z.core.$strip>>;
1057
+ }, z.core.$strip>]>>;
1058
+ cooldown: z.ZodOptional<z.ZodArray<z.ZodObject<{
1059
+ type: z.ZodEnum<{
1060
+ rest: "rest";
1061
+ warmup: "warmup";
1062
+ work: "work";
1063
+ recovery: "recovery";
1064
+ cooldown: "cooldown";
1065
+ interval_set: "interval_set";
1066
+ }>;
1067
+ name: z.ZodOptional<z.ZodString>;
1068
+ duration: z.ZodObject<{
1069
+ unit: z.ZodEnum<{
1070
+ seconds: "seconds";
1071
+ minutes: "minutes";
1072
+ hours: "hours";
1073
+ meters: "meters";
1074
+ kilometers: "kilometers";
1075
+ miles: "miles";
1076
+ yards: "yards";
1077
+ laps: "laps";
1078
+ }>;
1079
+ value: z.ZodNumber;
1080
+ }, z.core.$strip>;
1081
+ intensity: z.ZodObject<{
1082
+ unit: z.ZodEnum<{
1083
+ percent_ftp: "percent_ftp";
1084
+ percent_lthr: "percent_lthr";
1085
+ hr_zone: "hr_zone";
1086
+ pace_zone: "pace_zone";
1087
+ rpe: "rpe";
1088
+ css_offset: "css_offset";
1089
+ }>;
1090
+ value: z.ZodNumber;
1091
+ valueLow: z.ZodOptional<z.ZodNumber>;
1092
+ valueHigh: z.ZodOptional<z.ZodNumber>;
1093
+ description: z.ZodOptional<z.ZodString>;
1094
+ }, z.core.$strip>;
1095
+ cadence: z.ZodOptional<z.ZodObject<{
1096
+ low: z.ZodNumber;
1097
+ high: z.ZodNumber;
1098
+ }, z.core.$strip>>;
1099
+ notes: z.ZodOptional<z.ZodString>;
1100
+ }, z.core.$strip>>>;
1101
+ totalDuration: z.ZodOptional<z.ZodObject<{
1102
+ unit: z.ZodEnum<{
1103
+ seconds: "seconds";
1104
+ minutes: "minutes";
1105
+ hours: "hours";
1106
+ meters: "meters";
1107
+ kilometers: "kilometers";
1108
+ miles: "miles";
1109
+ yards: "yards";
1110
+ laps: "laps";
1111
+ }>;
1112
+ value: z.ZodNumber;
1113
+ }, z.core.$strip>>;
1114
+ estimatedTSS: z.ZodOptional<z.ZodNumber>;
1115
+ estimatedIF: z.ZodOptional<z.ZodNumber>;
1116
+ }, z.core.$strip>>;
1117
+ humanReadable: z.ZodOptional<z.ZodString>;
1118
+ completed: z.ZodBoolean;
1119
+ completedAt: z.ZodOptional<z.ZodString>;
1120
+ actualDuration: z.ZodOptional<z.ZodNumber>;
1121
+ actualDistance: z.ZodOptional<z.ZodNumber>;
1122
+ notes: z.ZodOptional<z.ZodString>;
1123
+ }, z.core.$strip>>;
1124
+ }, z.core.$strip>>;
1125
+ summary: z.ZodObject<{
1126
+ totalHours: z.ZodNumber;
1127
+ totalTSS: z.ZodOptional<z.ZodNumber>;
1128
+ bySport: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
1129
+ sessions: z.ZodNumber;
1130
+ hours: z.ZodOptional<z.ZodNumber>;
1131
+ km: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>>;
1132
+ meters: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>>;
1133
+ }, z.core.$strip>>>;
1134
+ }, z.core.$strip>;
1135
+ isRecoveryWeek: z.ZodBoolean;
1136
+ }, z.core.$strip>;
1137
+ export declare const HeartRateZoneSchema: z.ZodObject<{
1138
+ zone: z.ZodNumber;
1139
+ name: z.ZodString;
1140
+ percentLow: z.ZodOptional<z.ZodNumber>;
1141
+ percentHigh: z.ZodOptional<z.ZodNumber>;
1142
+ hrLow: z.ZodNumber;
1143
+ hrHigh: z.ZodNumber;
1144
+ }, z.core.$strip>;
1145
+ export declare const HeartRateZonesSchema: z.ZodObject<{
1146
+ lthr: z.ZodNumber;
1147
+ zones: z.ZodArray<z.ZodObject<{
1148
+ zone: z.ZodNumber;
1149
+ name: z.ZodString;
1150
+ percentLow: z.ZodOptional<z.ZodNumber>;
1151
+ percentHigh: z.ZodOptional<z.ZodNumber>;
1152
+ hrLow: z.ZodNumber;
1153
+ hrHigh: z.ZodNumber;
1154
+ }, z.core.$strip>>;
1155
+ }, z.core.$strip>;
1156
+ export declare const PowerZoneSchema: z.ZodObject<{
1157
+ zone: z.ZodNumber;
1158
+ name: z.ZodString;
1159
+ percentLow: z.ZodNumber;
1160
+ percentHigh: z.ZodNumber;
1161
+ wattsLow: z.ZodNumber;
1162
+ wattsHigh: z.ZodNumber;
1163
+ }, z.core.$strip>;
1164
+ export declare const PowerZonesSchema: z.ZodObject<{
1165
+ ftp: z.ZodNumber;
1166
+ zones: z.ZodArray<z.ZodObject<{
1167
+ zone: z.ZodNumber;
1168
+ name: z.ZodString;
1169
+ percentLow: z.ZodNumber;
1170
+ percentHigh: z.ZodNumber;
1171
+ wattsLow: z.ZodNumber;
1172
+ wattsHigh: z.ZodNumber;
1173
+ }, z.core.$strip>>;
1174
+ }, z.core.$strip>;
1175
+ export declare const SwimZoneSchema: z.ZodObject<{
1176
+ zone: z.ZodNumber;
1177
+ name: z.ZodString;
1178
+ paceOffset: z.ZodNumber;
1179
+ pace: z.ZodString;
1180
+ }, z.core.$strip>;
1181
+ export declare const SwimZonesSchema: z.ZodObject<{
1182
+ css: z.ZodString;
1183
+ cssSeconds: z.ZodNumber;
1184
+ zones: z.ZodArray<z.ZodObject<{
1185
+ zone: z.ZodNumber;
1186
+ name: z.ZodString;
1187
+ paceOffset: z.ZodNumber;
1188
+ pace: z.ZodString;
1189
+ }, z.core.$strip>>;
1190
+ }, z.core.$strip>;
1191
+ export declare const PaceZoneSchema: z.ZodObject<{
1192
+ zone: z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>;
1193
+ name: z.ZodString;
1194
+ pace: z.ZodString;
1195
+ paceOffset: z.ZodOptional<z.ZodNumber>;
1196
+ paceSeconds: z.ZodOptional<z.ZodNumber>;
1197
+ }, z.core.$strip>;
1198
+ export declare const PaceZonesSchema: z.ZodObject<{
1199
+ threshold: z.ZodOptional<z.ZodString>;
1200
+ thresholdPace: z.ZodOptional<z.ZodString>;
1201
+ thresholdSeconds: z.ZodOptional<z.ZodNumber>;
1202
+ thresholdPaceSeconds: z.ZodOptional<z.ZodNumber>;
1203
+ zones: z.ZodOptional<z.ZodArray<z.ZodObject<{
1204
+ zone: z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>;
1205
+ name: z.ZodString;
1206
+ pace: z.ZodString;
1207
+ paceOffset: z.ZodOptional<z.ZodNumber>;
1208
+ paceSeconds: z.ZodOptional<z.ZodNumber>;
1209
+ }, z.core.$strip>>>;
1210
+ }, z.core.$strip>;
1211
+ export declare const AthleteZonesSchema: z.ZodObject<{
1212
+ run: z.ZodOptional<z.ZodObject<{
1213
+ hr: z.ZodOptional<z.ZodObject<{
1214
+ lthr: z.ZodNumber;
1215
+ zones: z.ZodArray<z.ZodObject<{
1216
+ zone: z.ZodNumber;
1217
+ name: z.ZodString;
1218
+ percentLow: z.ZodOptional<z.ZodNumber>;
1219
+ percentHigh: z.ZodOptional<z.ZodNumber>;
1220
+ hrLow: z.ZodNumber;
1221
+ hrHigh: z.ZodNumber;
1222
+ }, z.core.$strip>>;
1223
+ }, z.core.$strip>>;
1224
+ pace: z.ZodOptional<z.ZodObject<{
1225
+ threshold: z.ZodOptional<z.ZodString>;
1226
+ thresholdPace: z.ZodOptional<z.ZodString>;
1227
+ thresholdSeconds: z.ZodOptional<z.ZodNumber>;
1228
+ thresholdPaceSeconds: z.ZodOptional<z.ZodNumber>;
1229
+ zones: z.ZodOptional<z.ZodArray<z.ZodObject<{
1230
+ zone: z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>;
1231
+ name: z.ZodString;
1232
+ pace: z.ZodString;
1233
+ paceOffset: z.ZodOptional<z.ZodNumber>;
1234
+ paceSeconds: z.ZodOptional<z.ZodNumber>;
1235
+ }, z.core.$strip>>>;
1236
+ }, z.core.$strip>>;
1237
+ }, z.core.$strip>>;
1238
+ bike: z.ZodOptional<z.ZodObject<{
1239
+ hr: z.ZodOptional<z.ZodObject<{
1240
+ lthr: z.ZodNumber;
1241
+ zones: z.ZodArray<z.ZodObject<{
1242
+ zone: z.ZodNumber;
1243
+ name: z.ZodString;
1244
+ percentLow: z.ZodOptional<z.ZodNumber>;
1245
+ percentHigh: z.ZodOptional<z.ZodNumber>;
1246
+ hrLow: z.ZodNumber;
1247
+ hrHigh: z.ZodNumber;
1248
+ }, z.core.$strip>>;
1249
+ }, z.core.$strip>>;
1250
+ power: z.ZodOptional<z.ZodObject<{
1251
+ ftp: z.ZodNumber;
1252
+ zones: z.ZodArray<z.ZodObject<{
1253
+ zone: z.ZodNumber;
1254
+ name: z.ZodString;
1255
+ percentLow: z.ZodNumber;
1256
+ percentHigh: z.ZodNumber;
1257
+ wattsLow: z.ZodNumber;
1258
+ wattsHigh: z.ZodNumber;
1259
+ }, z.core.$strip>>;
1260
+ }, z.core.$strip>>;
1261
+ }, z.core.$strip>>;
1262
+ swim: z.ZodOptional<z.ZodObject<{
1263
+ css: z.ZodString;
1264
+ cssSeconds: z.ZodNumber;
1265
+ zones: z.ZodArray<z.ZodObject<{
1266
+ zone: z.ZodNumber;
1267
+ name: z.ZodString;
1268
+ paceOffset: z.ZodNumber;
1269
+ pace: z.ZodString;
1270
+ }, z.core.$strip>>;
1271
+ }, z.core.$strip>>;
1272
+ maxHR: z.ZodOptional<z.ZodNumber>;
1273
+ restingHR: z.ZodOptional<z.ZodNumber>;
1274
+ weight: z.ZodOptional<z.ZodNumber>;
1275
+ }, z.core.$strip>;
1276
+ export declare const FoundationLevelSchema: z.ZodString;
1277
+ export declare const FoundationSchema: z.ZodObject<{
1278
+ raceHistory: z.ZodArray<z.ZodString>;
1279
+ peakTrainingLoad: z.ZodNumber;
1280
+ foundationLevel: z.ZodString;
1281
+ yearsInSport: z.ZodNumber;
1282
+ }, z.core.$strip>;
1283
+ export declare const WeeklyVolumeSchema: z.ZodObject<{
1284
+ total: z.ZodNumber;
1285
+ swim: z.ZodOptional<z.ZodNumber>;
1286
+ bike: z.ZodOptional<z.ZodNumber>;
1287
+ run: z.ZodOptional<z.ZodNumber>;
1288
+ }, z.core.$strip>;
1289
+ export declare const LongestSessionsSchema: z.ZodObject<{
1290
+ swim: z.ZodOptional<z.ZodNumber>;
1291
+ bike: z.ZodOptional<z.ZodNumber>;
1292
+ run: z.ZodOptional<z.ZodNumber>;
1293
+ }, z.core.$strip>;
1294
+ export declare const CurrentFormSchema: z.ZodObject<{
1295
+ weeklyVolume: z.ZodObject<{
1296
+ total: z.ZodNumber;
1297
+ swim: z.ZodOptional<z.ZodNumber>;
1298
+ bike: z.ZodOptional<z.ZodNumber>;
1299
+ run: z.ZodOptional<z.ZodNumber>;
1300
+ }, z.core.$strip>;
1301
+ longestSessions: z.ZodObject<{
1302
+ swim: z.ZodOptional<z.ZodNumber>;
1303
+ bike: z.ZodOptional<z.ZodNumber>;
1304
+ run: z.ZodOptional<z.ZodNumber>;
1305
+ }, z.core.$strip>;
1306
+ consistency: z.ZodNumber;
1307
+ timeSincePeakFitness: z.ZodOptional<z.ZodString>;
1308
+ reasonForTimeOff: z.ZodOptional<z.ZodString>;
1309
+ }, z.core.$strip>;
1310
+ export declare const SportEvidenceSchema: z.ZodObject<{
1311
+ sport: z.ZodEnum<{
1312
+ swim: "swim";
1313
+ bike: "bike";
1314
+ run: "run";
1315
+ strength: "strength";
1316
+ brick: "brick";
1317
+ race: "race";
1318
+ rest: "rest";
1319
+ }>;
1320
+ evidence: z.ZodString;
1321
+ }, z.core.$strip>;
1322
+ export declare const AthleteAssessmentSchema: z.ZodObject<{
1323
+ foundation: z.ZodObject<{
1324
+ raceHistory: z.ZodArray<z.ZodString>;
1325
+ peakTrainingLoad: z.ZodNumber;
1326
+ foundationLevel: z.ZodString;
1327
+ yearsInSport: z.ZodNumber;
1328
+ }, z.core.$strip>;
1329
+ currentForm: z.ZodObject<{
1330
+ weeklyVolume: z.ZodObject<{
1331
+ total: z.ZodNumber;
1332
+ swim: z.ZodOptional<z.ZodNumber>;
1333
+ bike: z.ZodOptional<z.ZodNumber>;
1334
+ run: z.ZodOptional<z.ZodNumber>;
1335
+ }, z.core.$strip>;
1336
+ longestSessions: z.ZodObject<{
1337
+ swim: z.ZodOptional<z.ZodNumber>;
1338
+ bike: z.ZodOptional<z.ZodNumber>;
1339
+ run: z.ZodOptional<z.ZodNumber>;
1340
+ }, z.core.$strip>;
1341
+ consistency: z.ZodNumber;
1342
+ timeSincePeakFitness: z.ZodOptional<z.ZodString>;
1343
+ reasonForTimeOff: z.ZodOptional<z.ZodString>;
1344
+ }, z.core.$strip>;
1345
+ strengths: z.ZodArray<z.ZodObject<{
1346
+ sport: z.ZodEnum<{
1347
+ swim: "swim";
1348
+ bike: "bike";
1349
+ run: "run";
1350
+ strength: "strength";
1351
+ brick: "brick";
1352
+ race: "race";
1353
+ rest: "rest";
1354
+ }>;
1355
+ evidence: z.ZodString;
1356
+ }, z.core.$strip>>;
1357
+ limiters: z.ZodArray<z.ZodObject<{
1358
+ sport: z.ZodEnum<{
1359
+ swim: "swim";
1360
+ bike: "bike";
1361
+ run: "run";
1362
+ strength: "strength";
1363
+ brick: "brick";
1364
+ race: "race";
1365
+ rest: "rest";
1366
+ }>;
1367
+ evidence: z.ZodString;
1368
+ }, z.core.$strip>>;
1369
+ constraints: z.ZodArray<z.ZodString>;
1370
+ }, z.core.$strip>;
1371
+ export declare const WeeklyHoursRangeSchema: z.ZodObject<{
1372
+ low: z.ZodNumber;
1373
+ high: z.ZodNumber;
1374
+ }, z.core.$strip>;
1375
+ export declare const TrainingPhaseSchema: z.ZodObject<{
1376
+ name: z.ZodString;
1377
+ startWeek: z.ZodNumber;
1378
+ endWeek: z.ZodNumber;
1379
+ focus: z.ZodString;
1380
+ weeklyHoursRange: z.ZodObject<{
1381
+ low: z.ZodNumber;
1382
+ high: z.ZodNumber;
1383
+ }, z.core.$strip>;
1384
+ keyWorkouts: z.ZodArray<z.ZodString>;
1385
+ physiologicalGoals: z.ZodArray<z.ZodString>;
1386
+ }, z.core.$strip>;
1387
+ export declare const EventDistancesSchema: z.ZodObject<{
1388
+ swim: z.ZodOptional<z.ZodNumber>;
1389
+ bike: z.ZodOptional<z.ZodNumber>;
1390
+ run: z.ZodOptional<z.ZodNumber>;
1391
+ }, z.core.$strip>;
1392
+ export declare const RaceEventSchema: z.ZodObject<{
1393
+ name: z.ZodString;
1394
+ date: z.ZodString;
1395
+ type: z.ZodString;
1396
+ distances: z.ZodOptional<z.ZodObject<{
1397
+ swim: z.ZodOptional<z.ZodNumber>;
1398
+ bike: z.ZodOptional<z.ZodNumber>;
1399
+ run: z.ZodOptional<z.ZodNumber>;
1400
+ }, z.core.$strip>>;
1401
+ }, z.core.$strip>;
1402
+ export declare const SwimPacingSchema: z.ZodRecord<z.ZodString, z.ZodAny>;
1403
+ export declare const BikePacingSchema: z.ZodRecord<z.ZodString, z.ZodAny>;
1404
+ export declare const RunPacingSchema: z.ZodRecord<z.ZodString, z.ZodAny>;
1405
+ export declare const RacePacingSchema: z.ZodRecord<z.ZodString, z.ZodAny>;
1406
+ export declare const RaceNutritionSchema: z.ZodRecord<z.ZodString, z.ZodAny>;
1407
+ export declare const TaperSchema: z.ZodRecord<z.ZodString, z.ZodAny>;
1408
+ export declare const RaceDaySchema: z.ZodRecord<z.ZodString, z.ZodAny>;
1409
+ export declare const RaceStrategySchema: z.ZodRecord<z.ZodString, z.ZodAny>;
1410
+ export declare const PlanMetaSchema: z.ZodObject<{
1411
+ id: z.ZodString;
1412
+ athlete: z.ZodString;
1413
+ event: z.ZodString;
1414
+ eventDate: z.ZodString;
1415
+ planStartDate: z.ZodString;
1416
+ planEndDate: z.ZodString;
1417
+ createdAt: z.ZodString;
1418
+ updatedAt: z.ZodString;
1419
+ totalWeeks: z.ZodNumber;
1420
+ generatedBy: z.ZodString;
1421
+ }, z.core.$strip>;
1422
+ export declare const TrainingPlanSchema: z.ZodObject<{
1423
+ version: z.ZodLiteral<"1.0">;
1424
+ meta: z.ZodObject<{
1425
+ id: z.ZodString;
1426
+ athlete: z.ZodString;
1427
+ event: z.ZodString;
1428
+ eventDate: z.ZodString;
1429
+ planStartDate: z.ZodString;
1430
+ planEndDate: z.ZodString;
1431
+ createdAt: z.ZodString;
1432
+ updatedAt: z.ZodString;
1433
+ totalWeeks: z.ZodNumber;
1434
+ generatedBy: z.ZodString;
1435
+ }, z.core.$strip>;
1436
+ preferences: z.ZodObject<{
1437
+ swim: z.ZodEnum<{
1438
+ meters: "meters";
1439
+ yards: "yards";
1440
+ }>;
1441
+ bike: z.ZodEnum<{
1442
+ kilometers: "kilometers";
1443
+ miles: "miles";
1444
+ }>;
1445
+ run: z.ZodEnum<{
1446
+ kilometers: "kilometers";
1447
+ miles: "miles";
1448
+ }>;
1449
+ firstDayOfWeek: z.ZodEnum<{
1450
+ monday: "monday";
1451
+ sunday: "sunday";
1452
+ }>;
1453
+ }, z.core.$strip>;
1454
+ assessment: z.ZodObject<{
1455
+ foundation: z.ZodObject<{
1456
+ raceHistory: z.ZodArray<z.ZodString>;
1457
+ peakTrainingLoad: z.ZodNumber;
1458
+ foundationLevel: z.ZodString;
1459
+ yearsInSport: z.ZodNumber;
1460
+ }, z.core.$strip>;
1461
+ currentForm: z.ZodObject<{
1462
+ weeklyVolume: z.ZodObject<{
1463
+ total: z.ZodNumber;
1464
+ swim: z.ZodOptional<z.ZodNumber>;
1465
+ bike: z.ZodOptional<z.ZodNumber>;
1466
+ run: z.ZodOptional<z.ZodNumber>;
1467
+ }, z.core.$strip>;
1468
+ longestSessions: z.ZodObject<{
1469
+ swim: z.ZodOptional<z.ZodNumber>;
1470
+ bike: z.ZodOptional<z.ZodNumber>;
1471
+ run: z.ZodOptional<z.ZodNumber>;
1472
+ }, z.core.$strip>;
1473
+ consistency: z.ZodNumber;
1474
+ timeSincePeakFitness: z.ZodOptional<z.ZodString>;
1475
+ reasonForTimeOff: z.ZodOptional<z.ZodString>;
1476
+ }, z.core.$strip>;
1477
+ strengths: z.ZodArray<z.ZodObject<{
1478
+ sport: z.ZodEnum<{
1479
+ swim: "swim";
1480
+ bike: "bike";
1481
+ run: "run";
1482
+ strength: "strength";
1483
+ brick: "brick";
1484
+ race: "race";
1485
+ rest: "rest";
1486
+ }>;
1487
+ evidence: z.ZodString;
1488
+ }, z.core.$strip>>;
1489
+ limiters: z.ZodArray<z.ZodObject<{
1490
+ sport: z.ZodEnum<{
1491
+ swim: "swim";
1492
+ bike: "bike";
1493
+ run: "run";
1494
+ strength: "strength";
1495
+ brick: "brick";
1496
+ race: "race";
1497
+ rest: "rest";
1498
+ }>;
1499
+ evidence: z.ZodString;
1500
+ }, z.core.$strip>>;
1501
+ constraints: z.ZodArray<z.ZodString>;
1502
+ }, z.core.$strip>;
1503
+ zones: z.ZodObject<{
1504
+ run: z.ZodOptional<z.ZodObject<{
1505
+ hr: z.ZodOptional<z.ZodObject<{
1506
+ lthr: z.ZodNumber;
1507
+ zones: z.ZodArray<z.ZodObject<{
1508
+ zone: z.ZodNumber;
1509
+ name: z.ZodString;
1510
+ percentLow: z.ZodOptional<z.ZodNumber>;
1511
+ percentHigh: z.ZodOptional<z.ZodNumber>;
1512
+ hrLow: z.ZodNumber;
1513
+ hrHigh: z.ZodNumber;
1514
+ }, z.core.$strip>>;
1515
+ }, z.core.$strip>>;
1516
+ pace: z.ZodOptional<z.ZodObject<{
1517
+ threshold: z.ZodOptional<z.ZodString>;
1518
+ thresholdPace: z.ZodOptional<z.ZodString>;
1519
+ thresholdSeconds: z.ZodOptional<z.ZodNumber>;
1520
+ thresholdPaceSeconds: z.ZodOptional<z.ZodNumber>;
1521
+ zones: z.ZodOptional<z.ZodArray<z.ZodObject<{
1522
+ zone: z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>;
1523
+ name: z.ZodString;
1524
+ pace: z.ZodString;
1525
+ paceOffset: z.ZodOptional<z.ZodNumber>;
1526
+ paceSeconds: z.ZodOptional<z.ZodNumber>;
1527
+ }, z.core.$strip>>>;
1528
+ }, z.core.$strip>>;
1529
+ }, z.core.$strip>>;
1530
+ bike: z.ZodOptional<z.ZodObject<{
1531
+ hr: z.ZodOptional<z.ZodObject<{
1532
+ lthr: z.ZodNumber;
1533
+ zones: z.ZodArray<z.ZodObject<{
1534
+ zone: z.ZodNumber;
1535
+ name: z.ZodString;
1536
+ percentLow: z.ZodOptional<z.ZodNumber>;
1537
+ percentHigh: z.ZodOptional<z.ZodNumber>;
1538
+ hrLow: z.ZodNumber;
1539
+ hrHigh: z.ZodNumber;
1540
+ }, z.core.$strip>>;
1541
+ }, z.core.$strip>>;
1542
+ power: z.ZodOptional<z.ZodObject<{
1543
+ ftp: z.ZodNumber;
1544
+ zones: z.ZodArray<z.ZodObject<{
1545
+ zone: z.ZodNumber;
1546
+ name: z.ZodString;
1547
+ percentLow: z.ZodNumber;
1548
+ percentHigh: z.ZodNumber;
1549
+ wattsLow: z.ZodNumber;
1550
+ wattsHigh: z.ZodNumber;
1551
+ }, z.core.$strip>>;
1552
+ }, z.core.$strip>>;
1553
+ }, z.core.$strip>>;
1554
+ swim: z.ZodOptional<z.ZodObject<{
1555
+ css: z.ZodString;
1556
+ cssSeconds: z.ZodNumber;
1557
+ zones: z.ZodArray<z.ZodObject<{
1558
+ zone: z.ZodNumber;
1559
+ name: z.ZodString;
1560
+ paceOffset: z.ZodNumber;
1561
+ pace: z.ZodString;
1562
+ }, z.core.$strip>>;
1563
+ }, z.core.$strip>>;
1564
+ maxHR: z.ZodOptional<z.ZodNumber>;
1565
+ restingHR: z.ZodOptional<z.ZodNumber>;
1566
+ weight: z.ZodOptional<z.ZodNumber>;
1567
+ }, z.core.$strip>;
1568
+ phases: z.ZodArray<z.ZodObject<{
1569
+ name: z.ZodString;
1570
+ startWeek: z.ZodNumber;
1571
+ endWeek: z.ZodNumber;
1572
+ focus: z.ZodString;
1573
+ weeklyHoursRange: z.ZodObject<{
1574
+ low: z.ZodNumber;
1575
+ high: z.ZodNumber;
1576
+ }, z.core.$strip>;
1577
+ keyWorkouts: z.ZodArray<z.ZodString>;
1578
+ physiologicalGoals: z.ZodArray<z.ZodString>;
1579
+ }, z.core.$strip>>;
1580
+ weeks: z.ZodArray<z.ZodObject<{
1581
+ weekNumber: z.ZodNumber;
1582
+ startDate: z.ZodString;
1583
+ endDate: z.ZodString;
1584
+ phase: z.ZodString;
1585
+ focus: z.ZodString;
1586
+ targetHours: z.ZodNumber;
1587
+ days: z.ZodArray<z.ZodObject<{
1588
+ date: z.ZodString;
1589
+ dayOfWeek: z.ZodString;
1590
+ workouts: z.ZodArray<z.ZodObject<{
1591
+ id: z.ZodString;
1592
+ sport: z.ZodEnum<{
1593
+ swim: "swim";
1594
+ bike: "bike";
1595
+ run: "run";
1596
+ strength: "strength";
1597
+ brick: "brick";
1598
+ race: "race";
1599
+ rest: "rest";
1600
+ }>;
1601
+ type: z.ZodString;
1602
+ name: z.ZodString;
1603
+ description: z.ZodOptional<z.ZodString>;
1604
+ durationMinutes: z.ZodOptional<z.ZodNumber>;
1605
+ distanceMeters: z.ZodOptional<z.ZodNumber>;
1606
+ distanceKm: z.ZodOptional<z.ZodNumber>;
1607
+ primaryZone: z.ZodOptional<z.ZodString>;
1608
+ targetHR: z.ZodOptional<z.ZodObject<{
1609
+ low: z.ZodNumber;
1610
+ high: z.ZodNumber;
1611
+ }, z.core.$strip>>;
1612
+ targetPower: z.ZodOptional<z.ZodUnion<readonly [z.ZodObject<{
1613
+ low: z.ZodNumber;
1614
+ high: z.ZodNumber;
1615
+ }, z.core.$strip>, z.ZodString]>>;
1616
+ targetPace: z.ZodOptional<z.ZodObject<{
1617
+ low: z.ZodString;
1618
+ high: z.ZodString;
1619
+ }, z.core.$strip>>;
1620
+ rpe: z.ZodOptional<z.ZodNumber>;
1621
+ structure: z.ZodOptional<z.ZodObject<{
1622
+ warmup: z.ZodOptional<z.ZodArray<z.ZodObject<{
1623
+ type: z.ZodEnum<{
1624
+ rest: "rest";
1625
+ warmup: "warmup";
1626
+ work: "work";
1627
+ recovery: "recovery";
1628
+ cooldown: "cooldown";
1629
+ interval_set: "interval_set";
1630
+ }>;
1631
+ name: z.ZodOptional<z.ZodString>;
1632
+ duration: z.ZodObject<{
1633
+ unit: z.ZodEnum<{
1634
+ seconds: "seconds";
1635
+ minutes: "minutes";
1636
+ hours: "hours";
1637
+ meters: "meters";
1638
+ kilometers: "kilometers";
1639
+ miles: "miles";
1640
+ yards: "yards";
1641
+ laps: "laps";
1642
+ }>;
1643
+ value: z.ZodNumber;
1644
+ }, z.core.$strip>;
1645
+ intensity: z.ZodObject<{
1646
+ unit: z.ZodEnum<{
1647
+ percent_ftp: "percent_ftp";
1648
+ percent_lthr: "percent_lthr";
1649
+ hr_zone: "hr_zone";
1650
+ pace_zone: "pace_zone";
1651
+ rpe: "rpe";
1652
+ css_offset: "css_offset";
1653
+ }>;
1654
+ value: z.ZodNumber;
1655
+ valueLow: z.ZodOptional<z.ZodNumber>;
1656
+ valueHigh: z.ZodOptional<z.ZodNumber>;
1657
+ description: z.ZodOptional<z.ZodString>;
1658
+ }, z.core.$strip>;
1659
+ cadence: z.ZodOptional<z.ZodObject<{
1660
+ low: z.ZodNumber;
1661
+ high: z.ZodNumber;
1662
+ }, z.core.$strip>>;
1663
+ notes: z.ZodOptional<z.ZodString>;
1664
+ }, z.core.$strip>>>;
1665
+ main: z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
1666
+ type: z.ZodEnum<{
1667
+ rest: "rest";
1668
+ warmup: "warmup";
1669
+ work: "work";
1670
+ recovery: "recovery";
1671
+ cooldown: "cooldown";
1672
+ interval_set: "interval_set";
1673
+ }>;
1674
+ name: z.ZodOptional<z.ZodString>;
1675
+ duration: z.ZodObject<{
1676
+ unit: z.ZodEnum<{
1677
+ seconds: "seconds";
1678
+ minutes: "minutes";
1679
+ hours: "hours";
1680
+ meters: "meters";
1681
+ kilometers: "kilometers";
1682
+ miles: "miles";
1683
+ yards: "yards";
1684
+ laps: "laps";
1685
+ }>;
1686
+ value: z.ZodNumber;
1687
+ }, z.core.$strip>;
1688
+ intensity: z.ZodObject<{
1689
+ unit: z.ZodEnum<{
1690
+ percent_ftp: "percent_ftp";
1691
+ percent_lthr: "percent_lthr";
1692
+ hr_zone: "hr_zone";
1693
+ pace_zone: "pace_zone";
1694
+ rpe: "rpe";
1695
+ css_offset: "css_offset";
1696
+ }>;
1697
+ value: z.ZodNumber;
1698
+ valueLow: z.ZodOptional<z.ZodNumber>;
1699
+ valueHigh: z.ZodOptional<z.ZodNumber>;
1700
+ description: z.ZodOptional<z.ZodString>;
1701
+ }, z.core.$strip>;
1702
+ cadence: z.ZodOptional<z.ZodObject<{
1703
+ low: z.ZodNumber;
1704
+ high: z.ZodNumber;
1705
+ }, z.core.$strip>>;
1706
+ notes: z.ZodOptional<z.ZodString>;
1707
+ }, z.core.$strip>, z.ZodObject<{
1708
+ type: z.ZodLiteral<"interval_set">;
1709
+ name: z.ZodOptional<z.ZodString>;
1710
+ repeats: z.ZodNumber;
1711
+ steps: z.ZodArray<z.ZodObject<{
1712
+ type: z.ZodEnum<{
1713
+ rest: "rest";
1714
+ warmup: "warmup";
1715
+ work: "work";
1716
+ recovery: "recovery";
1717
+ cooldown: "cooldown";
1718
+ interval_set: "interval_set";
1719
+ }>;
1720
+ name: z.ZodOptional<z.ZodString>;
1721
+ duration: z.ZodObject<{
1722
+ unit: z.ZodEnum<{
1723
+ seconds: "seconds";
1724
+ minutes: "minutes";
1725
+ hours: "hours";
1726
+ meters: "meters";
1727
+ kilometers: "kilometers";
1728
+ miles: "miles";
1729
+ yards: "yards";
1730
+ laps: "laps";
1731
+ }>;
1732
+ value: z.ZodNumber;
1733
+ }, z.core.$strip>;
1734
+ intensity: z.ZodObject<{
1735
+ unit: z.ZodEnum<{
1736
+ percent_ftp: "percent_ftp";
1737
+ percent_lthr: "percent_lthr";
1738
+ hr_zone: "hr_zone";
1739
+ pace_zone: "pace_zone";
1740
+ rpe: "rpe";
1741
+ css_offset: "css_offset";
1742
+ }>;
1743
+ value: z.ZodNumber;
1744
+ valueLow: z.ZodOptional<z.ZodNumber>;
1745
+ valueHigh: z.ZodOptional<z.ZodNumber>;
1746
+ description: z.ZodOptional<z.ZodString>;
1747
+ }, z.core.$strip>;
1748
+ cadence: z.ZodOptional<z.ZodObject<{
1749
+ low: z.ZodNumber;
1750
+ high: z.ZodNumber;
1751
+ }, z.core.$strip>>;
1752
+ notes: z.ZodOptional<z.ZodString>;
1753
+ }, z.core.$strip>>;
1754
+ }, z.core.$strip>]>>;
1755
+ cooldown: z.ZodOptional<z.ZodArray<z.ZodObject<{
1756
+ type: z.ZodEnum<{
1757
+ rest: "rest";
1758
+ warmup: "warmup";
1759
+ work: "work";
1760
+ recovery: "recovery";
1761
+ cooldown: "cooldown";
1762
+ interval_set: "interval_set";
1763
+ }>;
1764
+ name: z.ZodOptional<z.ZodString>;
1765
+ duration: z.ZodObject<{
1766
+ unit: z.ZodEnum<{
1767
+ seconds: "seconds";
1768
+ minutes: "minutes";
1769
+ hours: "hours";
1770
+ meters: "meters";
1771
+ kilometers: "kilometers";
1772
+ miles: "miles";
1773
+ yards: "yards";
1774
+ laps: "laps";
1775
+ }>;
1776
+ value: z.ZodNumber;
1777
+ }, z.core.$strip>;
1778
+ intensity: z.ZodObject<{
1779
+ unit: z.ZodEnum<{
1780
+ percent_ftp: "percent_ftp";
1781
+ percent_lthr: "percent_lthr";
1782
+ hr_zone: "hr_zone";
1783
+ pace_zone: "pace_zone";
1784
+ rpe: "rpe";
1785
+ css_offset: "css_offset";
1786
+ }>;
1787
+ value: z.ZodNumber;
1788
+ valueLow: z.ZodOptional<z.ZodNumber>;
1789
+ valueHigh: z.ZodOptional<z.ZodNumber>;
1790
+ description: z.ZodOptional<z.ZodString>;
1791
+ }, z.core.$strip>;
1792
+ cadence: z.ZodOptional<z.ZodObject<{
1793
+ low: z.ZodNumber;
1794
+ high: z.ZodNumber;
1795
+ }, z.core.$strip>>;
1796
+ notes: z.ZodOptional<z.ZodString>;
1797
+ }, z.core.$strip>>>;
1798
+ totalDuration: z.ZodOptional<z.ZodObject<{
1799
+ unit: z.ZodEnum<{
1800
+ seconds: "seconds";
1801
+ minutes: "minutes";
1802
+ hours: "hours";
1803
+ meters: "meters";
1804
+ kilometers: "kilometers";
1805
+ miles: "miles";
1806
+ yards: "yards";
1807
+ laps: "laps";
1808
+ }>;
1809
+ value: z.ZodNumber;
1810
+ }, z.core.$strip>>;
1811
+ estimatedTSS: z.ZodOptional<z.ZodNumber>;
1812
+ estimatedIF: z.ZodOptional<z.ZodNumber>;
1813
+ }, z.core.$strip>>;
1814
+ humanReadable: z.ZodOptional<z.ZodString>;
1815
+ completed: z.ZodBoolean;
1816
+ completedAt: z.ZodOptional<z.ZodString>;
1817
+ actualDuration: z.ZodOptional<z.ZodNumber>;
1818
+ actualDistance: z.ZodOptional<z.ZodNumber>;
1819
+ notes: z.ZodOptional<z.ZodString>;
1820
+ }, z.core.$strip>>;
1821
+ }, z.core.$strip>>;
1822
+ summary: z.ZodObject<{
1823
+ totalHours: z.ZodNumber;
1824
+ totalTSS: z.ZodOptional<z.ZodNumber>;
1825
+ bySport: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
1826
+ sessions: z.ZodNumber;
1827
+ hours: z.ZodOptional<z.ZodNumber>;
1828
+ km: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>>;
1829
+ meters: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>>;
1830
+ }, z.core.$strip>>>;
1831
+ }, z.core.$strip>;
1832
+ isRecoveryWeek: z.ZodBoolean;
1833
+ }, z.core.$strip>>;
1834
+ raceStrategy: z.ZodRecord<z.ZodString, z.ZodAny>;
1835
+ }, z.core.$strip>;
1836
+ export type ValidationResult = {
1837
+ success: true;
1838
+ data: z.infer<typeof TrainingPlanSchema>;
1839
+ } | {
1840
+ success: false;
1841
+ errors: ValidationError[];
1842
+ };
1843
+ export interface ValidationError {
1844
+ path: string;
1845
+ message: string;
1846
+ code: string;
1847
+ }
1848
+ /**
1849
+ * Validate a training plan JSON against the schema.
1850
+ * Returns a result object with either the validated data or an array of errors.
1851
+ */
1852
+ export declare function validatePlan(data: unknown): ValidationResult;
1853
+ /**
1854
+ * Validate a training plan and throw an error if invalid.
1855
+ * Use this when you want to halt execution on validation failure.
1856
+ */
1857
+ export declare function validatePlanOrThrow(data: unknown): z.infer<typeof TrainingPlanSchema>;
1858
+ /**
1859
+ * Format validation errors into a human-readable string.
1860
+ */
1861
+ export declare function formatValidationErrors(errors: ValidationError[]): string;
1862
+ /**
1863
+ * Get the JSON Schema representation of the training plan schema.
1864
+ * Useful for documentation and external validation tools.
1865
+ */
1866
+ export declare function getJsonSchema(): object;
1867
+ export type TrainingPlan = z.infer<typeof TrainingPlanSchema>;
1868
+ export type Workout = z.infer<typeof WorkoutSchema>;
1869
+ export type TrainingWeek = z.infer<typeof TrainingWeekSchema>;
1870
+ export type TrainingDay = z.infer<typeof TrainingDaySchema>;
1871
+ export type TrainingPhase = z.infer<typeof TrainingPhaseSchema>;
1872
+ export type AthleteAssessment = z.infer<typeof AthleteAssessmentSchema>;
1873
+ export type AthleteZones = z.infer<typeof AthleteZonesSchema>;
1874
+ export type RaceStrategy = z.infer<typeof RaceStrategySchema>;
1875
+ export type UnitPreferences = z.infer<typeof UnitPreferencesSchema>;