hevy-shared 1.0.984 → 1.0.986

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.
@@ -226,10 +226,10 @@ type PickExerciseResult<T extends HevyTrainerLibraryExercise> = {
226
226
  exercise?: T;
227
227
  trace: ExerciseSelectionTrace;
228
228
  };
229
- export declare function pickExerciseForPrescription<T extends HevyTrainerLibraryExercise>(params: ExerciseSelectionParams<T> & {
229
+ export declare function pickTrainerExercise<T extends HevyTrainerLibraryExercise>(params: ExerciseSelectionParams<T> & {
230
230
  withTrace: true;
231
231
  }): PickExerciseResult<T>;
232
- export declare function pickExerciseForPrescription<T extends HevyTrainerLibraryExercise>(params: ExerciseSelectionParams<T>): T | undefined;
232
+ export declare function pickTrainerExercise<T extends HevyTrainerLibraryExercise>(params: ExerciseSelectionParams<T>): T | undefined;
233
233
  export type HevyTrainerLibraryExercise = Pick<LibraryExercise, 'id' | 'title' | 'priority' | 'muscle_group' | 'other_muscles' | 'exercise_type' | 'equipment_category' | 'category' | 'level' | 'goal' | 'granular_equipments'>;
234
234
  export declare const DEFAULT_TRAINER_CARDIO_ATTACHMENT_DURATION_SECONDS = 600;
235
235
  export interface ExercisePrescriptionError {
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DEFAULT_TRAINER_CARDIO_ATTACHMENT_DURATION_SECONDS = exports.getPrioritySortedExercises = exports.isEquipmentCompatible = exports.normalizeExerciseCategory = exports.getTrainerRestTimerSeconds = exports.getTrainerRepRange = exports.getTrainerSetCount = exports.isTrainerProgramCardioExercise = exports.isTrainerProgramResistanceExercise = exports.programSplits = exports.frequencyMap = exports.routineNames = exports.defaultDurationPerFrequency = exports.hevyTrainerExerciseCategories = exports.granularEquipmentsToTrainerEquipments = exports.trainerEquipmentToGranularEquipments = exports.granularEquipmentDefaults = exports.trainerGymTypes = exports.workoutDurationOptions = void 0;
4
- exports.pickExerciseForPrescription = pickExerciseForPrescription;
4
+ exports.pickTrainerExercise = pickTrainerExercise;
5
5
  exports.generateProgram = generateProgram;
6
6
  const _1 = require(".");
7
7
  exports.workoutDurationOptions = [40, 60, 80];
@@ -455,7 +455,7 @@ const findAlternativeIsolationExercise = (exercises, criteria, context) => {
455
455
  return matchesCriteria && isNotUsed;
456
456
  });
457
457
  };
458
- const pickExerciseForPrescriptionWithTrace = (params) => {
458
+ const pickTrainerExerciseWithTrace = (params) => {
459
459
  const { sortedExercises, handPickedExercises, criteria, context } = params;
460
460
  const trace = { entries: [] };
461
461
  const exercises = handPickedExercises
@@ -534,46 +534,35 @@ const pickExerciseForPrescriptionWithTrace = (params) => {
534
534
  ? { exercise, trace: Object.assign(Object.assign({}, trace), { selectedPass: 6 }) }
535
535
  : { exercise: undefined, trace };
536
536
  };
537
- function pickExerciseForPrescription(params) {
537
+ function pickTrainerExercise(params) {
538
538
  if (params.withTrace) {
539
- return pickExerciseForPrescriptionWithTrace(params);
539
+ return pickTrainerExerciseWithTrace(params);
540
540
  }
541
- return pickExerciseForPrescriptionWithTrace(params).exercise;
541
+ return pickTrainerExerciseWithTrace(params).exercise;
542
542
  }
543
543
  const CARDIO_TRACE_INDEX_BEFORE_TEMPLATE = -1;
544
544
  exports.DEFAULT_TRAINER_CARDIO_ATTACHMENT_DURATION_SECONDS = 600;
545
- const appendCardioExerciseSelectionTrace = (traces, params) => {
546
- traces.push({
547
- traceKind: 'cardio',
548
- routine: params.routine,
549
- prescriptionIndex: params.prescriptionIndex,
550
- selectedExerciseId: params.selectedExerciseId,
551
- equipments: params.equipments,
552
- level: params.level,
553
- trace: {
554
- entries: [
555
- {
556
- pass: 1,
557
- label: 'cardio: first priority exercise matching equipment + level; globally excluded IDs skipped',
558
- candidatePoolSize: params.candidatePoolSize,
559
- selectedExerciseId: params.selectedExerciseId,
560
- },
561
- ],
562
- selectedPass: 1,
563
- },
564
- });
565
- };
566
545
  /** Inserts optional cardio before or after template exercises for one routine. */
567
- const attachOptionalCardioToRoutine = ({ cardioPreference, cardioExercises, criteria, debugExerciseSelectionTrace, exerciseSelectionTraces, routine, templatePrescriptionCount, routineExercises, }) => {
546
+ const attachOptionalCardioToRoutine = ({ cardioPreference, sortedExercises, criteria, debugExerciseSelectionTrace, exerciseSelectionTraces, routine, templatePrescriptionCount, routineExercises, }) => {
568
547
  if (cardioPreference === 'no-cardio')
569
548
  return;
570
- const cardioExercise = cardioExercises.find((ex) => {
571
- var _a, _b, _c;
572
- const equipmentCompatible = (0, exports.isEquipmentCompatible)(ex, criteria.equipments);
573
- const levelCompatible = (_a = ex.level) === null || _a === void 0 ? void 0 : _a.includes(criteria.level);
574
- const excluded = (_c = (_b = criteria.excludedExerciseIds) === null || _b === void 0 ? void 0 : _b.has(ex.id)) !== null && _c !== void 0 ? _c : false;
575
- return equipmentCompatible && levelCompatible && !excluded;
576
- });
549
+ // Cardio is reusable across routines, so program/routine used-id contexts are
550
+ // intentionally omitted — only the global excluded set applies.
551
+ const selectionParams = {
552
+ sortedExercises,
553
+ criteria: {
554
+ frequency: criteria.frequency,
555
+ goal: criteria.goal,
556
+ level: criteria.level,
557
+ equipments: criteria.equipments,
558
+ muscleGroup: 'cardio',
559
+ exerciseCategory: 'all',
560
+ routineBarbellExerciseCount: 0,
561
+ },
562
+ context: { excludedExerciseIds: criteria.excludedExerciseIds },
563
+ };
564
+ const selection = pickTrainerExercise(Object.assign(Object.assign({}, selectionParams), { withTrace: true }));
565
+ const cardioExercise = selection.exercise;
577
566
  if (!cardioExercise)
578
567
  return;
579
568
  const slot = {
@@ -586,7 +575,8 @@ const attachOptionalCardioToRoutine = ({ cardioPreference, cardioExercises, crit
586
575
  else
587
576
  routineExercises.push(slot);
588
577
  if (debugExerciseSelectionTrace) {
589
- appendCardioExerciseSelectionTrace(exerciseSelectionTraces, {
578
+ exerciseSelectionTraces.push({
579
+ traceKind: 'cardio',
590
580
  routine,
591
581
  prescriptionIndex: cardioPreference === 'workout-start'
592
582
  ? CARDIO_TRACE_INDEX_BEFORE_TEMPLATE
@@ -594,7 +584,7 @@ const attachOptionalCardioToRoutine = ({ cardioPreference, cardioExercises, crit
594
584
  selectedExerciseId: cardioExercise.id,
595
585
  equipments: criteria.equipments,
596
586
  level: criteria.level,
597
- candidatePoolSize: cardioExercises.length,
587
+ trace: selection.trace,
598
588
  });
599
589
  }
600
590
  };
@@ -648,7 +638,7 @@ function generateProgram(params) {
648
638
  };
649
639
  let exercise;
650
640
  if (debugExerciseSelectionTrace) {
651
- const selection = pickExerciseForPrescription({
641
+ const selection = pickTrainerExercise({
652
642
  sortedExercises,
653
643
  criteria,
654
644
  context: {
@@ -671,7 +661,7 @@ function generateProgram(params) {
671
661
  });
672
662
  }
673
663
  else {
674
- exercise = pickExerciseForPrescription({
664
+ exercise = pickTrainerExercise({
675
665
  sortedExercises,
676
666
  criteria,
677
667
  context: {
@@ -719,8 +709,8 @@ function generateProgram(params) {
719
709
  }
720
710
  attachOptionalCardioToRoutine({
721
711
  cardioPreference,
722
- cardioExercises: sortedExercises.cardio,
723
- criteria: { equipments, level, excludedExerciseIds },
712
+ sortedExercises,
713
+ criteria: { equipments, level, goal, frequency, excludedExerciseIds },
724
714
  debugExerciseSelectionTrace,
725
715
  exerciseSelectionTraces,
726
716
  routine,
package/built/index.d.ts CHANGED
@@ -647,11 +647,12 @@ export declare const trainingGoals: readonly ["strength", "build_muscle", "fat_l
647
647
  export declare const trainingLevels: readonly ["beginner", "intermediate", "advanced"];
648
648
  export declare const exerciseCategories: readonly ["isolation", "compound", "assistance-compound"];
649
649
  export declare const restTimerLengths: readonly ["short", "medium", "long"];
650
+ export declare const cardioPreferences: readonly ["no-cardio", "workout-start", "workout-end"];
650
651
  export type TrainingGoal = Lookup<typeof trainingGoals>;
651
652
  export type TrainingLevel = Lookup<typeof trainingLevels>;
652
653
  export type ExerciseCategory = Lookup<typeof exerciseCategories>;
653
654
  export type RestTimerLength = typeof restTimerLengths[number];
654
- export type CardioPreference = 'no-cardio' | 'workout-start' | 'workout-end';
655
+ export type CardioPreference = typeof cardioPreferences[number];
655
656
  export type HevyTrainerProgramEquipment = Extract<Equipment, 'barbell' | 'dumbbell' | 'machine'>;
656
657
  export declare const hevyTrainerProgramEquipments: readonly ["barbell", "dumbbell", "machine"];
657
658
  export declare const granularEquipments: readonly ["barbell", "dumbbell", "kettlebell", "plate", "medicine_ball", "ez_bar", "landmine", "trap_bar", "pullup_bar", "dip_bar", "squat_rack", "flat_bench", "adjustable_bench", "dual_cable_machine", "single_cable_machine", "lat_pulldown_cable", "leg_press_machine", "smith_machine", "t_bar", "plate_machines", "stack_machines", "treadmill", "elliptical_trainer", "rowing_machine", "spinning", "stair_machine", "air_bike", "suspension_band", "resistance_band", "battle_rope", "rings", "jump_rope"];
package/built/index.js CHANGED
@@ -14,8 +14,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.isHeartRateSamples = exports.isPublicWorkout = exports.isSetType = exports.isRPE = exports.validRpeValues = exports.isSetPersonalRecordType = exports.weeklyTrainingFrequencies = exports.isGranularEquipment = exports.granularEquipments = exports.hevyTrainerProgramEquipments = exports.restTimerLengths = exports.exerciseCategories = exports.trainingLevels = exports.trainingGoals = exports.isCustomExerciseType = exports.customExericseTypes = exports.isExerciseType = exports.exerciseTypes = exports.isExerciseRepType = exports.exerciseRepTypes = exports.isEquipmentFilter = exports.equipmentFilters = exports.isEquipment = exports.equipments = exports.simplifiedMuscleGroupToMuscleGroups = exports.isMuscleGroupFilter = exports.muscleGroupFilters = exports.isMuscleGroup = exports.muscleGroups = exports.isSimplifiedMuscleGroup = exports.simplifiedMuscleGroups = exports.miscellaneousMuscles = exports.chestMuscles = exports.backMuscles = exports.legMuscles = exports.armMuscles = exports.shoulderMuscles = exports.coreMuscles = exports.DefaultClientConfiguration = exports.parseClientAuthTokenResponse = exports.isCoachRole = exports.isErrorResponse = exports.isLivePRVolumeOption = exports.isTimerVolumeOption = exports.isWeekday = exports.orderedWeekdays = exports.isBodyMeasurementUnit = exports.isDistanceUnitShort = exports.isDistanceUnit = exports.isWeightUnit = void 0;
18
- exports.isOAuthScope = exports.supportedScopes = exports.isSuggestedUserSource = exports.isValidUserWorkoutMetricsType = exports.isBodyMeasurementKey = exports.measurementsList = exports.isHevyTrainerRoutine = exports.isWorkoutBiometrics = void 0;
17
+ exports.isPublicWorkout = exports.isSetType = exports.isRPE = exports.validRpeValues = exports.isSetPersonalRecordType = exports.weeklyTrainingFrequencies = exports.isGranularEquipment = exports.granularEquipments = exports.hevyTrainerProgramEquipments = exports.cardioPreferences = exports.restTimerLengths = exports.exerciseCategories = exports.trainingLevels = exports.trainingGoals = exports.isCustomExerciseType = exports.customExericseTypes = exports.isExerciseType = exports.exerciseTypes = exports.isExerciseRepType = exports.exerciseRepTypes = exports.isEquipmentFilter = exports.equipmentFilters = exports.isEquipment = exports.equipments = exports.simplifiedMuscleGroupToMuscleGroups = exports.isMuscleGroupFilter = exports.muscleGroupFilters = exports.isMuscleGroup = exports.muscleGroups = exports.isSimplifiedMuscleGroup = exports.simplifiedMuscleGroups = exports.miscellaneousMuscles = exports.chestMuscles = exports.backMuscles = exports.legMuscles = exports.armMuscles = exports.shoulderMuscles = exports.coreMuscles = exports.DefaultClientConfiguration = exports.parseClientAuthTokenResponse = exports.isCoachRole = exports.isErrorResponse = exports.isLivePRVolumeOption = exports.isTimerVolumeOption = exports.isWeekday = exports.orderedWeekdays = exports.isBodyMeasurementUnit = exports.isDistanceUnitShort = exports.isDistanceUnit = exports.isWeightUnit = void 0;
18
+ exports.isOAuthScope = exports.supportedScopes = exports.isSuggestedUserSource = exports.isValidUserWorkoutMetricsType = exports.isBodyMeasurementKey = exports.measurementsList = exports.isHevyTrainerRoutine = exports.isWorkoutBiometrics = exports.isHeartRateSamples = void 0;
19
19
  const typeUtils_1 = require("./typeUtils");
20
20
  __exportStar(require("./schemas"), exports);
21
21
  __exportStar(require("./constants"), exports);
@@ -230,6 +230,11 @@ exports.exerciseCategories = [
230
230
  'assistance-compound',
231
231
  ];
232
232
  exports.restTimerLengths = ['short', 'medium', 'long'];
233
+ exports.cardioPreferences = [
234
+ 'no-cardio',
235
+ 'workout-start',
236
+ 'workout-end',
237
+ ];
233
238
  exports.hevyTrainerProgramEquipments = [
234
239
  'barbell',
235
240
  'dumbbell',
@@ -381,11 +381,11 @@ const chestOnlySorted = (exercises) => {
381
381
  }, {});
382
382
  return Object.assign(Object.assign({}, empty), { chest: exercises });
383
383
  };
384
- describe('pickExerciseForPrescription', () => {
384
+ describe('pickTrainerExercise', () => {
385
385
  it('pass 1: returns the first matching exercise that is not used in the program', () => {
386
386
  const used = makeExercise({ id: 'used' });
387
387
  const fresh = makeExercise({ id: 'fresh' });
388
- const result = (0, hevyTrainer_1.pickExerciseForPrescription)({
388
+ const result = (0, hevyTrainer_1.pickTrainerExercise)({
389
389
  sortedExercises: chestOnlySorted([used, fresh]),
390
390
  criteria: baseCriteria(),
391
391
  context: {
@@ -396,7 +396,7 @@ describe('pickExerciseForPrescription', () => {
396
396
  });
397
397
  it('pass 2: falls back to exercises not used in the current routine when all are used in the program', () => {
398
398
  const onlyExercise = makeExercise({ id: 'only' });
399
- const result = (0, hevyTrainer_1.pickExerciseForPrescription)({
399
+ const result = (0, hevyTrainer_1.pickTrainerExercise)({
400
400
  sortedExercises: chestOnlySorted([onlyExercise]),
401
401
  criteria: baseCriteria(),
402
402
  context: {
@@ -411,7 +411,7 @@ describe('pickExerciseForPrescription', () => {
411
411
  it('excludes exercises in `excludedExerciseIds` across all passes', () => {
412
412
  const excluded = makeExercise({ id: 'excluded' });
413
413
  const alternative = makeExercise({ id: 'alt' });
414
- const result = (0, hevyTrainer_1.pickExerciseForPrescription)({
414
+ const result = (0, hevyTrainer_1.pickTrainerExercise)({
415
415
  sortedExercises: chestOnlySorted([excluded, alternative]),
416
416
  criteria: baseCriteria(),
417
417
  context: {
@@ -421,7 +421,7 @@ describe('pickExerciseForPrescription', () => {
421
421
  expect(result === null || result === void 0 ? void 0 : result.id).toBe('alt');
422
422
  });
423
423
  it('returns undefined when no exercise satisfies any pass', () => {
424
- const result = (0, hevyTrainer_1.pickExerciseForPrescription)({
424
+ const result = (0, hevyTrainer_1.pickTrainerExercise)({
425
425
  sortedExercises: chestOnlySorted([]),
426
426
  criteria: baseCriteria(),
427
427
  context: {},
@@ -437,7 +437,7 @@ describe('pickExerciseForPrescription', () => {
437
437
  id: 'bw',
438
438
  granular_equipments: [],
439
439
  });
440
- const result = (0, hevyTrainer_1.pickExerciseForPrescription)({
440
+ const result = (0, hevyTrainer_1.pickTrainerExercise)({
441
441
  sortedExercises: chestOnlySorted([needsBarbell, bodyweight]),
442
442
  criteria: baseCriteria({ equipments: [] }),
443
443
  context: {},
@@ -448,7 +448,7 @@ describe('pickExerciseForPrescription', () => {
448
448
  const wrongLevel = makeExercise({ id: 'wrong', level: ['advanced'] });
449
449
  const wrongGoal = makeExercise({ id: 'wrongGoal', goal: ['fat_loss'] });
450
450
  const rightOne = makeExercise({ id: 'right' });
451
- const result = (0, hevyTrainer_1.pickExerciseForPrescription)({
451
+ const result = (0, hevyTrainer_1.pickTrainerExercise)({
452
452
  sortedExercises: chestOnlySorted([wrongLevel, wrongGoal, rightOne]),
453
453
  criteria: baseCriteria({ level: 'beginner', goal: 'strength' }),
454
454
  context: {},
@@ -458,7 +458,7 @@ describe('pickExerciseForPrescription', () => {
458
458
  it('considers handpicked exercises before sortedExercises', () => {
459
459
  const hand = makeExercise({ id: 'hand' });
460
460
  const sorted = makeExercise({ id: 'sorted' });
461
- const result = (0, hevyTrainer_1.pickExerciseForPrescription)({
461
+ const result = (0, hevyTrainer_1.pickTrainerExercise)({
462
462
  sortedExercises: chestOnlySorted([sorted]),
463
463
  handPickedExercises: [hand],
464
464
  criteria: baseCriteria(),
@@ -473,7 +473,7 @@ describe('pickExerciseForPrescription', () => {
473
473
  id: 'compound',
474
474
  category: 'compound',
475
475
  });
476
- const result = (0, hevyTrainer_1.pickExerciseForPrescription)({
476
+ const result = (0, hevyTrainer_1.pickTrainerExercise)({
477
477
  sortedExercises: chestOnlySorted([compoundOnly]),
478
478
  criteria: baseCriteria({ exerciseCategory: 'isolation' }),
479
479
  context: {},
@@ -491,7 +491,7 @@ describe('pickExerciseForPrescription', () => {
491
491
  return acc;
492
492
  }, {});
493
493
  sorted.shoulders = [secondaryChest];
494
- const result = (0, hevyTrainer_1.pickExerciseForPrescription)({
494
+ const result = (0, hevyTrainer_1.pickTrainerExercise)({
495
495
  sortedExercises: sorted,
496
496
  criteria: baseCriteria({ muscleGroup: 'chest' }),
497
497
  context: {},
@@ -502,7 +502,7 @@ describe('pickExerciseForPrescription', () => {
502
502
  const barbellExercise = (id) => makeExercise({ id, equipment_category: 'barbell' });
503
503
  it('allows barbell exercises regardless of count when frequency > 1', () => {
504
504
  const ex = barbellExercise('bench');
505
- const result = (0, hevyTrainer_1.pickExerciseForPrescription)({
505
+ const result = (0, hevyTrainer_1.pickTrainerExercise)({
506
506
  sortedExercises: chestOnlySorted([ex]),
507
507
  criteria: baseCriteria({
508
508
  frequency: 3,
@@ -515,7 +515,7 @@ describe('pickExerciseForPrescription', () => {
515
515
  });
516
516
  it('allows barbell exercises under the cap when frequency === 1', () => {
517
517
  const ex = barbellExercise('bench');
518
- const result = (0, hevyTrainer_1.pickExerciseForPrescription)({
518
+ const result = (0, hevyTrainer_1.pickTrainerExercise)({
519
519
  sortedExercises: chestOnlySorted([ex]),
520
520
  criteria: baseCriteria({
521
521
  frequency: 1,
@@ -528,7 +528,7 @@ describe('pickExerciseForPrescription', () => {
528
528
  });
529
529
  it('rejects barbell exercises at or over the cap when a substitute is available', () => {
530
530
  const ex = barbellExercise('bench');
531
- const result = (0, hevyTrainer_1.pickExerciseForPrescription)({
531
+ const result = (0, hevyTrainer_1.pickTrainerExercise)({
532
532
  sortedExercises: chestOnlySorted([ex]),
533
533
  criteria: baseCriteria({
534
534
  frequency: 1,
@@ -542,7 +542,7 @@ describe('pickExerciseForPrescription', () => {
542
542
  });
543
543
  it('still allows barbell exercises over the cap when the user has no substitutes', () => {
544
544
  const ex = barbellExercise('bench');
545
- const result = (0, hevyTrainer_1.pickExerciseForPrescription)({
545
+ const result = (0, hevyTrainer_1.pickTrainerExercise)({
546
546
  sortedExercises: chestOnlySorted([ex]),
547
547
  criteria: baseCriteria({
548
548
  frequency: 1,
@@ -558,7 +558,7 @@ describe('pickExerciseForPrescription', () => {
558
558
  it('returns a trace when `withTrace: true` and records the winning pass', () => {
559
559
  var _a;
560
560
  const fresh = makeExercise({ id: 'fresh' });
561
- const result = (0, hevyTrainer_1.pickExerciseForPrescription)({
561
+ const result = (0, hevyTrainer_1.pickTrainerExercise)({
562
562
  sortedExercises: chestOnlySorted([fresh]),
563
563
  criteria: baseCriteria(),
564
564
  context: {},
@@ -572,7 +572,7 @@ describe('pickExerciseForPrescription', () => {
572
572
  });
573
573
  });
574
574
  it('returns a trace with no selected pass when nothing matches', () => {
575
- const result = (0, hevyTrainer_1.pickExerciseForPrescription)({
575
+ const result = (0, hevyTrainer_1.pickTrainerExercise)({
576
576
  sortedExercises: chestOnlySorted([]),
577
577
  criteria: baseCriteria(),
578
578
  context: {},
@@ -899,7 +899,7 @@ describe('generateProgram', () => {
899
899
  expect(result.success).toBe(true);
900
900
  expect(result.exerciseSelectionTraces.map((t) => t.prescriptionIndex)).toEqual([0, 1]);
901
901
  });
902
- it('records a single cardio trace entry (no multi-pass picker)', () => {
902
+ it('records a single cardio trace entry on pass 1', () => {
903
903
  const settings = makeSettings();
904
904
  settings.templates.full_body_1 = {
905
905
  exercises: [{ muscle_group: 'chest', category: 'compound' }],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hevy-shared",
3
- "version": "1.0.984",
3
+ "version": "1.0.986",
4
4
  "description": "",
5
5
  "main": "built/index.js",
6
6
  "types": "built/index.d.ts",
@@ -52,6 +52,6 @@
52
52
  "dependencies": {
53
53
  "dayjs": "^1.11.19",
54
54
  "lodash": "^4.17.21",
55
- "zod": "3.24.3"
55
+ "zod": "3.24.2"
56
56
  }
57
57
  }