@aneuhold/core-ts-db-lib 5.0.8 → 5.0.9

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 (128) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/lib/browser.d.ts +14 -14
  3. package/lib/browser.d.ts.map +1 -1
  4. package/lib/browser.js +12 -12
  5. package/lib/browser.js.map +1 -1
  6. package/lib/browser.ts +14 -14
  7. package/lib/documents/BaseDocument.js +1 -1
  8. package/lib/documents/BaseDocument.js.map +1 -1
  9. package/lib/documents/BaseDocument.ts +1 -1
  10. package/lib/documents/dashboard/Task.d.ts +1 -1
  11. package/lib/documents/dashboard/Task.d.ts.map +1 -1
  12. package/lib/documents/dashboard/Task.ts +1 -1
  13. package/lib/schemas/UUIDSchema.js +1 -1
  14. package/lib/schemas/UUIDSchema.js.map +1 -1
  15. package/lib/schemas/UUIDSchema.ts +1 -1
  16. package/lib/services/{DocumentService.d.ts → Document.service.d.ts} +1 -1
  17. package/lib/services/Document.service.d.ts.map +1 -0
  18. package/lib/services/{DocumentService.js → Document.service.js} +1 -1
  19. package/lib/services/Document.service.js.map +1 -0
  20. package/lib/services/dashboard/Task/{TaskService.d.ts → Task.service.d.ts} +2 -10
  21. package/lib/services/dashboard/Task/Task.service.d.ts.map +1 -0
  22. package/lib/services/dashboard/Task/{TaskService.js → Task.service.js} +8 -8
  23. package/lib/services/dashboard/Task/Task.service.js.map +1 -0
  24. package/lib/services/dashboard/Task/{TaskService.ts → Task.service.ts} +8 -8
  25. package/lib/services/dashboard/Task/{TaskFilterService.d.ts → TaskFilter.service.d.ts} +1 -1
  26. package/lib/services/dashboard/Task/TaskFilter.service.d.ts.map +1 -0
  27. package/lib/services/dashboard/Task/{TaskFilterService.js → TaskFilter.service.js} +1 -1
  28. package/lib/services/dashboard/Task/TaskFilter.service.js.map +1 -0
  29. package/lib/services/dashboard/Task/{TaskRecurrenceService.d.ts → TaskRecurrence.service.d.ts} +2 -9
  30. package/lib/services/dashboard/Task/TaskRecurrence.service.d.ts.map +1 -0
  31. package/lib/services/dashboard/Task/{TaskRecurrenceService.js → TaskRecurrence.service.js} +6 -6
  32. package/lib/services/dashboard/Task/TaskRecurrence.service.js.map +1 -0
  33. package/lib/services/dashboard/Task/{TaskRecurrenceService.ts → TaskRecurrence.service.ts} +5 -8
  34. package/lib/services/dashboard/Task/{TaskSortService.d.ts → TaskSort.service.d.ts} +2 -42
  35. package/lib/services/dashboard/Task/TaskSort.service.d.ts.map +1 -0
  36. package/lib/services/dashboard/Task/{TaskSortService.js → TaskSort.service.js} +12 -12
  37. package/lib/services/dashboard/Task/TaskSort.service.js.map +1 -0
  38. package/lib/services/dashboard/Task/{TaskSortService.ts → TaskSort.service.ts} +11 -11
  39. package/lib/services/workout/EquipmentType/{WorkoutEquipmentTypeService.d.ts → WorkoutEquipmentType.service.d.ts} +1 -1
  40. package/lib/services/workout/EquipmentType/WorkoutEquipmentType.service.d.ts.map +1 -0
  41. package/lib/services/workout/EquipmentType/{WorkoutEquipmentTypeService.js → WorkoutEquipmentType.service.js} +1 -1
  42. package/lib/services/workout/EquipmentType/WorkoutEquipmentType.service.js.map +1 -0
  43. package/lib/services/workout/Exercise/WorkoutExercise.service.d.ts +52 -0
  44. package/lib/services/workout/Exercise/WorkoutExercise.service.d.ts.map +1 -0
  45. package/lib/services/workout/Exercise/{WorkoutExerciseService.js → WorkoutExercise.service.js} +18 -18
  46. package/lib/services/workout/Exercise/WorkoutExercise.service.js.map +1 -0
  47. package/lib/services/workout/Exercise/{WorkoutExerciseService.ts → WorkoutExercise.service.ts} +17 -17
  48. package/lib/services/workout/ExerciseCalibration/{WorkoutExerciseCalibrationService.d.ts → WorkoutExerciseCalibration.service.d.ts} +2 -12
  49. package/lib/services/workout/ExerciseCalibration/WorkoutExerciseCalibration.service.d.ts.map +1 -0
  50. package/lib/services/workout/ExerciseCalibration/{WorkoutExerciseCalibrationService.js → WorkoutExerciseCalibration.service.js} +10 -7
  51. package/lib/services/workout/ExerciseCalibration/WorkoutExerciseCalibration.service.js.map +1 -0
  52. package/lib/services/workout/ExerciseCalibration/{WorkoutExerciseCalibrationService.ts → WorkoutExerciseCalibration.service.ts} +10 -7
  53. package/lib/services/workout/Mesocycle/{WorkoutMesocycleService.d.ts → WorkoutMesocycle.service.d.ts} +3 -41
  54. package/lib/services/workout/Mesocycle/WorkoutMesocycle.service.d.ts.map +1 -0
  55. package/lib/services/workout/Mesocycle/{WorkoutMesocycleService.js → WorkoutMesocycle.service.js} +21 -21
  56. package/lib/services/workout/Mesocycle/WorkoutMesocycle.service.js.map +1 -0
  57. package/lib/services/workout/Mesocycle/{WorkoutMesocycleService.ts → WorkoutMesocycle.service.ts} +21 -21
  58. package/lib/services/workout/Mesocycle/WorkoutMesocyclePlanContext.d.ts +1 -10
  59. package/lib/services/workout/Mesocycle/WorkoutMesocyclePlanContext.d.ts.map +1 -1
  60. package/lib/services/workout/Mesocycle/WorkoutMesocyclePlanContext.js +3 -3
  61. package/lib/services/workout/Mesocycle/WorkoutMesocyclePlanContext.js.map +1 -1
  62. package/lib/services/workout/Mesocycle/WorkoutMesocyclePlanContext.ts +3 -3
  63. package/lib/services/workout/Microcycle/{WorkoutMicrocycleService.d.ts → WorkoutMicrocycle.service.d.ts} +1 -1
  64. package/lib/services/workout/Microcycle/WorkoutMicrocycle.service.d.ts.map +1 -0
  65. package/lib/services/workout/Microcycle/{WorkoutMicrocycleService.js → WorkoutMicrocycle.service.js} +4 -4
  66. package/lib/services/workout/Microcycle/WorkoutMicrocycle.service.js.map +1 -0
  67. package/lib/services/workout/Microcycle/{WorkoutMicrocycleService.ts → WorkoutMicrocycle.service.ts} +3 -3
  68. package/lib/services/workout/Session/{WorkoutSessionService.d.ts → WorkoutSession.service.d.ts} +2 -6
  69. package/lib/services/workout/Session/WorkoutSession.service.d.ts.map +1 -0
  70. package/lib/services/workout/Session/{WorkoutSessionService.js → WorkoutSession.service.js} +5 -5
  71. package/lib/services/workout/Session/WorkoutSession.service.js.map +1 -0
  72. package/lib/services/workout/Session/{WorkoutSessionService.ts → WorkoutSession.service.ts} +4 -4
  73. package/lib/services/workout/SessionExercise/{WorkoutSessionExerciseService.d.ts → WorkoutSessionExercise.service.d.ts} +2 -8
  74. package/lib/services/workout/SessionExercise/WorkoutSessionExercise.service.d.ts.map +1 -0
  75. package/lib/services/workout/SessionExercise/{WorkoutSessionExerciseService.js → WorkoutSessionExercise.service.js} +5 -5
  76. package/lib/services/workout/SessionExercise/WorkoutSessionExercise.service.js.map +1 -0
  77. package/lib/services/workout/SessionExercise/{WorkoutSessionExerciseService.ts → WorkoutSessionExercise.service.ts} +4 -4
  78. package/lib/services/workout/Set/{WorkoutSetService.d.ts → WorkoutSet.service.d.ts} +2 -23
  79. package/lib/services/workout/Set/WorkoutSet.service.d.ts.map +1 -0
  80. package/lib/services/workout/Set/{WorkoutSetService.js → WorkoutSet.service.js} +7 -7
  81. package/lib/services/workout/Set/WorkoutSet.service.js.map +1 -0
  82. package/lib/services/workout/Set/{WorkoutSetService.ts → WorkoutSet.service.ts} +6 -6
  83. package/lib/services/workout/util/SFR/{WorkoutSFRService.d.ts → WorkoutSFR.service.d.ts} +1 -1
  84. package/lib/services/workout/util/SFR/WorkoutSFR.service.d.ts.map +1 -0
  85. package/lib/services/workout/util/SFR/{WorkoutSFRService.js → WorkoutSFR.service.js} +1 -1
  86. package/lib/services/workout/util/SFR/WorkoutSFR.service.js.map +1 -0
  87. package/lib/services/workout/util/VolumePlanning/WorkoutVolumePlanning.service.d.ts +53 -0
  88. package/lib/services/workout/util/VolumePlanning/WorkoutVolumePlanning.service.d.ts.map +1 -0
  89. package/lib/services/workout/util/VolumePlanning/{WorkoutVolumePlanningService.js → WorkoutVolumePlanning.service.js} +53 -53
  90. package/lib/services/workout/util/VolumePlanning/WorkoutVolumePlanning.service.js.map +1 -0
  91. package/lib/services/workout/util/VolumePlanning/{WorkoutVolumePlanningService.ts → WorkoutVolumePlanning.service.ts} +52 -52
  92. package/package.json +4 -4
  93. package/lib/services/DocumentService.d.ts.map +0 -1
  94. package/lib/services/DocumentService.js.map +0 -1
  95. package/lib/services/dashboard/Task/TaskFilterService.d.ts.map +0 -1
  96. package/lib/services/dashboard/Task/TaskFilterService.js.map +0 -1
  97. package/lib/services/dashboard/Task/TaskRecurrenceService.d.ts.map +0 -1
  98. package/lib/services/dashboard/Task/TaskRecurrenceService.js.map +0 -1
  99. package/lib/services/dashboard/Task/TaskService.d.ts.map +0 -1
  100. package/lib/services/dashboard/Task/TaskService.js.map +0 -1
  101. package/lib/services/dashboard/Task/TaskSortService.d.ts.map +0 -1
  102. package/lib/services/dashboard/Task/TaskSortService.js.map +0 -1
  103. package/lib/services/workout/EquipmentType/WorkoutEquipmentTypeService.d.ts.map +0 -1
  104. package/lib/services/workout/EquipmentType/WorkoutEquipmentTypeService.js.map +0 -1
  105. package/lib/services/workout/Exercise/WorkoutExerciseService.d.ts +0 -99
  106. package/lib/services/workout/Exercise/WorkoutExerciseService.d.ts.map +0 -1
  107. package/lib/services/workout/Exercise/WorkoutExerciseService.js.map +0 -1
  108. package/lib/services/workout/ExerciseCalibration/WorkoutExerciseCalibrationService.d.ts.map +0 -1
  109. package/lib/services/workout/ExerciseCalibration/WorkoutExerciseCalibrationService.js.map +0 -1
  110. package/lib/services/workout/Mesocycle/WorkoutMesocycleService.d.ts.map +0 -1
  111. package/lib/services/workout/Mesocycle/WorkoutMesocycleService.js.map +0 -1
  112. package/lib/services/workout/Microcycle/WorkoutMicrocycleService.d.ts.map +0 -1
  113. package/lib/services/workout/Microcycle/WorkoutMicrocycleService.js.map +0 -1
  114. package/lib/services/workout/Session/WorkoutSessionService.d.ts.map +0 -1
  115. package/lib/services/workout/Session/WorkoutSessionService.js.map +0 -1
  116. package/lib/services/workout/SessionExercise/WorkoutSessionExerciseService.d.ts.map +0 -1
  117. package/lib/services/workout/SessionExercise/WorkoutSessionExerciseService.js.map +0 -1
  118. package/lib/services/workout/Set/WorkoutSetService.d.ts.map +0 -1
  119. package/lib/services/workout/Set/WorkoutSetService.js.map +0 -1
  120. package/lib/services/workout/util/SFR/WorkoutSFRService.d.ts.map +0 -1
  121. package/lib/services/workout/util/SFR/WorkoutSFRService.js.map +0 -1
  122. package/lib/services/workout/util/VolumePlanning/WorkoutVolumePlanningService.d.ts +0 -198
  123. package/lib/services/workout/util/VolumePlanning/WorkoutVolumePlanningService.d.ts.map +0 -1
  124. package/lib/services/workout/util/VolumePlanning/WorkoutVolumePlanningService.js.map +0 -1
  125. /package/lib/services/{DocumentService.ts → Document.service.ts} +0 -0
  126. /package/lib/services/dashboard/Task/{TaskFilterService.ts → TaskFilter.service.ts} +0 -0
  127. /package/lib/services/workout/EquipmentType/{WorkoutEquipmentTypeService.ts → WorkoutEquipmentType.service.ts} +0 -0
  128. /package/lib/services/workout/util/SFR/{WorkoutSFRService.ts → WorkoutSFR.service.ts} +0 -0
@@ -7,6 +7,7 @@ import type { DashboardTagSettings } from '../../../embedded-types/dashboard/use
7
7
  * A service for sorting tasks.
8
8
  */
9
9
  export default class DashboardTaskSortService {
10
+ #private;
10
11
  /**
11
12
  * Sorts the provided task IDs based on the provided sort settings.
12
13
  *
@@ -31,46 +32,5 @@ export default class DashboardTaskSortService {
31
32
  * @returns A map of task IDs to tag header names.
32
33
  */
33
34
  static getTagHeaderMap(taskMap: DashboardTaskMap, taskIds: UUID[], userId: UUID, tagSettings: DashboardTagSettings, noPriorityTagsIndicator: string, sortDirection: DashboardTaskSortDirection): Record<UUID, string>;
34
- /**
35
- * Gets the task sort function based on the sort by and sort direction.
36
- *
37
- * @param sortBy The field to sort by.
38
- * @param sortDirection The direction to sort.
39
- * @param tagSettings The tag settings.
40
- * @param userId The user ID.
41
- * @returns A function that compares two tasks.
42
- */
43
- private static getTaskSortFunction;
44
- /**
45
- * Gets the highest priority tag for the provided task. If there are no tags,
46
- * or if there are no tags with a priority, then this will return null.
47
- *
48
- * @param task The task.
49
- * @param userId The user ID.
50
- * @param tagSettings The tag settings.
51
- * @param sortDirection The sort direction.
52
- * @returns The highest priority tag or null.
53
- */
54
- private static getHighestPriorityTag;
55
- /**
56
- * Gets the highest priority tag value for the provided task.
57
- *
58
- * @param task The task.
59
- * @param userId The user ID.
60
- * @param tagSettings The tag settings.
61
- * @param sortDirection The sort direction.
62
- * @returns The highest priority tag value.
63
- */
64
- private static getHighestPriorityTagValue;
65
- /**
66
- * Gets the priority tag for the provided task.
67
- *
68
- * @param task The task.
69
- * @param userId The user ID.
70
- * @param tagSettings The tag settings.
71
- * @param sortDirection The sort direction.
72
- * @returns The priority tag or null.
73
- */
74
- private static getPriorityTagForTask;
75
35
  }
76
- //# sourceMappingURL=TaskSortService.d.ts.map
36
+ //# sourceMappingURL=TaskSort.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaskSort.service.d.ts","sourceRoot":"","sources":["../../../../src/services/dashboard/Task/TaskSort.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,KAAK,EAAiB,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAC5F,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,wDAAwD,CAAC;AAC5G,OAAO,EAEL,0BAA0B,EAC3B,MAAM,wDAAwD,CAAC;AAChE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sDAAsD,CAAC;AAEjG;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,wBAAwB;;IAC3C;;;;;;;;OAQG;IACH,MAAM,CAAC,IAAI,CACT,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,IAAI,EAAE,EACf,YAAY,EAAE,6BAA6B,EAC3C,WAAW,EAAE,oBAAoB,GAChC,IAAI,EAAE;IAyBT;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,eAAe,CACpB,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,IAAI,EAAE,EACf,MAAM,EAAE,IAAI,EACZ,WAAW,EAAE,oBAAoB,EACjC,uBAAuB,EAAE,MAAM,EAC/B,aAAa,EAAE,0BAA0B,GACxC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC;CAmLxB"}
@@ -21,7 +21,7 @@ export default class DashboardTaskSortService {
21
21
  for (const sortSetting of sortSettings.sortList) {
22
22
  const { sortBy } = sortSetting;
23
23
  const { sortDirection } = sortSetting;
24
- const result = this.getTaskSortFunction(sortBy, sortDirection, tagSettings, sortSettings.userId)(taskA, taskB);
24
+ const result = this.#getTaskSortFunction(sortBy, sortDirection, tagSettings, sortSettings.userId)(taskA, taskB);
25
25
  if (result !== 0) {
26
26
  return result;
27
27
  }
@@ -49,7 +49,7 @@ export default class DashboardTaskSortService {
49
49
  const firstTask = taskMap[taskIds[0]];
50
50
  if (!firstTask)
51
51
  return tagHeaderMap;
52
- let tag = this.getHighestPriorityTag(firstTask, userId, tagSettings, sortDirection);
52
+ let tag = this.#getHighestPriorityTag(firstTask, userId, tagSettings, sortDirection);
53
53
  if (!tag) {
54
54
  tagHeaderMap[taskIds[0]] = noPriorityTagsIndicator;
55
55
  }
@@ -59,7 +59,7 @@ export default class DashboardTaskSortService {
59
59
  for (let i = 1; i < taskIds.length; i += 1) {
60
60
  const task = taskMap[taskIds[i]];
61
61
  if (task) {
62
- const taskTag = this.getHighestPriorityTag(task, userId, tagSettings, sortDirection);
62
+ const taskTag = this.#getHighestPriorityTag(task, userId, tagSettings, sortDirection);
63
63
  if (taskTag !== tag && tag !== noPriorityTagsIndicator) {
64
64
  tag = taskTag || noPriorityTagsIndicator;
65
65
  tagHeaderMap[taskIds[i]] = tag;
@@ -77,12 +77,12 @@ export default class DashboardTaskSortService {
77
77
  * @param userId The user ID.
78
78
  * @returns A function that compares two tasks.
79
79
  */
80
- static getTaskSortFunction(sortBy, sortDirection, tagSettings, userId) {
80
+ static #getTaskSortFunction(sortBy, sortDirection, tagSettings, userId) {
81
81
  switch (sortBy) {
82
82
  case DashboardTaskSortBy.tags:
83
83
  return (taskA, taskB) => {
84
- const highestPriorityTagA = this.getHighestPriorityTagValue(taskA, userId, tagSettings, sortDirection);
85
- const highestPriorityTagB = this.getHighestPriorityTagValue(taskB, userId, tagSettings, sortDirection);
84
+ const highestPriorityTagA = this.#getHighestPriorityTagValue(taskA, userId, tagSettings, sortDirection);
85
+ const highestPriorityTagB = this.#getHighestPriorityTagValue(taskB, userId, tagSettings, sortDirection);
86
86
  if (highestPriorityTagA === highestPriorityTagB) {
87
87
  return 0;
88
88
  }
@@ -140,8 +140,8 @@ export default class DashboardTaskSortService {
140
140
  * @param sortDirection The sort direction.
141
141
  * @returns The highest priority tag or null.
142
142
  */
143
- static getHighestPriorityTag(task, userId, tagSettings, sortDirection) {
144
- const priorityTag = this.getPriorityTagForTask(task, userId, tagSettings, sortDirection);
143
+ static #getHighestPriorityTag(task, userId, tagSettings, sortDirection) {
144
+ const priorityTag = this.#getPriorityTagForTask(task, userId, tagSettings, sortDirection);
145
145
  return priorityTag ? priorityTag.tag : null;
146
146
  }
147
147
  /**
@@ -153,8 +153,8 @@ export default class DashboardTaskSortService {
153
153
  * @param sortDirection The sort direction.
154
154
  * @returns The highest priority tag value.
155
155
  */
156
- static getHighestPriorityTagValue(task, userId, tagSettings, sortDirection) {
157
- const priorityTag = this.getPriorityTagForTask(task, userId, tagSettings, sortDirection);
156
+ static #getHighestPriorityTagValue(task, userId, tagSettings, sortDirection) {
157
+ const priorityTag = this.#getPriorityTagForTask(task, userId, tagSettings, sortDirection);
158
158
  return priorityTag ? priorityTag.priority : 0;
159
159
  }
160
160
  /**
@@ -166,7 +166,7 @@ export default class DashboardTaskSortService {
166
166
  * @param sortDirection The sort direction.
167
167
  * @returns The priority tag or null.
168
168
  */
169
- static getPriorityTagForTask(task, userId, tagSettings, sortDirection) {
169
+ static #getPriorityTagForTask(task, userId, tagSettings, sortDirection) {
170
170
  let priorityTag = null;
171
171
  const tags = task.tags[userId];
172
172
  if (!tags || tags.length === 0)
@@ -192,4 +192,4 @@ export default class DashboardTaskSortService {
192
192
  return priorityTag;
193
193
  }
194
194
  }
195
- //# sourceMappingURL=TaskSortService.js.map
195
+ //# sourceMappingURL=TaskSort.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaskSort.service.js","sourceRoot":"","sources":["../../../../src/services/dashboard/Task/TaskSort.service.ts"],"names":[],"mappings":"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"}
@@ -36,7 +36,7 @@ export default class DashboardTaskSortService {
36
36
  const { sortBy } = sortSetting;
37
37
  const { sortDirection } = sortSetting;
38
38
 
39
- const result = this.getTaskSortFunction(
39
+ const result = this.#getTaskSortFunction(
40
40
  sortBy,
41
41
  sortDirection,
42
42
  tagSettings,
@@ -75,7 +75,7 @@ export default class DashboardTaskSortService {
75
75
  if (taskIds.length === 0 || taskIds.length === 1) return tagHeaderMap;
76
76
  const firstTask = taskMap[taskIds[0]];
77
77
  if (!firstTask) return tagHeaderMap;
78
- let tag = this.getHighestPriorityTag(firstTask, userId, tagSettings, sortDirection);
78
+ let tag = this.#getHighestPriorityTag(firstTask, userId, tagSettings, sortDirection);
79
79
  if (!tag) {
80
80
  tagHeaderMap[taskIds[0]] = noPriorityTagsIndicator;
81
81
  } else {
@@ -84,7 +84,7 @@ export default class DashboardTaskSortService {
84
84
  for (let i = 1; i < taskIds.length; i += 1) {
85
85
  const task = taskMap[taskIds[i]];
86
86
  if (task) {
87
- const taskTag = this.getHighestPriorityTag(task, userId, tagSettings, sortDirection);
87
+ const taskTag = this.#getHighestPriorityTag(task, userId, tagSettings, sortDirection);
88
88
  if (taskTag !== tag && tag !== noPriorityTagsIndicator) {
89
89
  tag = taskTag || noPriorityTagsIndicator;
90
90
  tagHeaderMap[taskIds[i]] = tag;
@@ -103,7 +103,7 @@ export default class DashboardTaskSortService {
103
103
  * @param userId The user ID.
104
104
  * @returns A function that compares two tasks.
105
105
  */
106
- private static getTaskSortFunction(
106
+ static #getTaskSortFunction(
107
107
  sortBy: DashboardTaskSortBy,
108
108
  sortDirection: DashboardTaskSortDirection,
109
109
  tagSettings: DashboardTagSettings,
@@ -112,13 +112,13 @@ export default class DashboardTaskSortService {
112
112
  switch (sortBy) {
113
113
  case DashboardTaskSortBy.tags:
114
114
  return (taskA: DashboardTask, taskB: DashboardTask) => {
115
- const highestPriorityTagA = this.getHighestPriorityTagValue(
115
+ const highestPriorityTagA = this.#getHighestPriorityTagValue(
116
116
  taskA,
117
117
  userId,
118
118
  tagSettings,
119
119
  sortDirection
120
120
  );
121
- const highestPriorityTagB = this.getHighestPriorityTagValue(
121
+ const highestPriorityTagB = this.#getHighestPriorityTagValue(
122
122
  taskB,
123
123
  userId,
124
124
  tagSettings,
@@ -179,13 +179,13 @@ export default class DashboardTaskSortService {
179
179
  * @param sortDirection The sort direction.
180
180
  * @returns The highest priority tag or null.
181
181
  */
182
- private static getHighestPriorityTag(
182
+ static #getHighestPriorityTag(
183
183
  task: DashboardTask,
184
184
  userId: UUID,
185
185
  tagSettings: DashboardTagSettings,
186
186
  sortDirection: DashboardTaskSortDirection
187
187
  ): string | null {
188
- const priorityTag = this.getPriorityTagForTask(task, userId, tagSettings, sortDirection);
188
+ const priorityTag = this.#getPriorityTagForTask(task, userId, tagSettings, sortDirection);
189
189
  return priorityTag ? priorityTag.tag : null;
190
190
  }
191
191
 
@@ -198,13 +198,13 @@ export default class DashboardTaskSortService {
198
198
  * @param sortDirection The sort direction.
199
199
  * @returns The highest priority tag value.
200
200
  */
201
- private static getHighestPriorityTagValue(
201
+ static #getHighestPriorityTagValue(
202
202
  task: DashboardTask,
203
203
  userId: UUID,
204
204
  tagSettings: DashboardTagSettings,
205
205
  sortDirection: DashboardTaskSortDirection
206
206
  ): number {
207
- const priorityTag = this.getPriorityTagForTask(task, userId, tagSettings, sortDirection);
207
+ const priorityTag = this.#getPriorityTagForTask(task, userId, tagSettings, sortDirection);
208
208
  return priorityTag ? priorityTag.priority : 0;
209
209
  }
210
210
 
@@ -217,7 +217,7 @@ export default class DashboardTaskSortService {
217
217
  * @param sortDirection The sort direction.
218
218
  * @returns The priority tag or null.
219
219
  */
220
- private static getPriorityTagForTask(
220
+ static #getPriorityTagForTask(
221
221
  task: DashboardTask,
222
222
  userId: UUID,
223
223
  tagSettings: DashboardTagSettings,
@@ -45,4 +45,4 @@ export default class WorkoutEquipmentTypeService {
45
45
  */
46
46
  static findNearestWeight(equipmentType: WorkoutEquipmentType, targetWeight: number, direction: 'up' | 'down' | 'nearest' | 'prefer-down' | 'prefer-up'): number | null;
47
47
  }
48
- //# sourceMappingURL=WorkoutEquipmentTypeService.d.ts.map
48
+ //# sourceMappingURL=WorkoutEquipmentType.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkoutEquipmentType.service.d.ts","sourceRoot":"","sources":["../../../../src/services/workout/EquipmentType/WorkoutEquipmentType.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oDAAoD,CAAC;AAE/F;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,2BAA2B;IAC9C;;;;;;;;;OASG;IACH,MAAM,CAAC,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE;IAY/F;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,0BAA0B,CAC/B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GAC/C,MAAM,EAAE;IAoBX;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,iBAAiB,CACtB,aAAa,EAAE,oBAAoB,EACnC,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,IAAI,GAAG,MAAM,GAAG,SAAS,GAAG,aAAa,GAAG,WAAW,GACjE,MAAM,GAAG,IAAI;CAyCjB"}
@@ -101,4 +101,4 @@ export default class WorkoutEquipmentTypeService {
101
101
  return downDiff <= upDiff ? downResult : upResult;
102
102
  }
103
103
  }
104
- //# sourceMappingURL=WorkoutEquipmentTypeService.js.map
104
+ //# sourceMappingURL=WorkoutEquipmentType.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkoutEquipmentType.service.js","sourceRoot":"","sources":["../../../../src/services/workout/EquipmentType/WorkoutEquipmentType.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import type { WorkoutEquipmentType } from '../../../documents/workout/WorkoutEquipmentType.js';
2
+ import type { WorkoutExercise } from '../../../documents/workout/WorkoutExercise.js';
3
+ import { ExerciseRepRange } from '../../../documents/workout/WorkoutExercise.js';
4
+ import type { WorkoutExerciseCalibration } from '../../../documents/workout/WorkoutExerciseCalibration.js';
5
+ import type { WorkoutSet } from '../../../documents/workout/WorkoutSet.js';
6
+ /**
7
+ * A service for handling operations related to {@link WorkoutExercise}s.
8
+ */
9
+ export default class WorkoutExerciseService {
10
+ #private;
11
+ /**
12
+ * Returns the numeric rep range based on the ExerciseRepRange enum.
13
+ *
14
+ * - Heavy: { min: 5, max: 15 }
15
+ * - Medium: { min: 10, max: 20 }
16
+ * - Light: { min: 15, max: 30 }
17
+ *
18
+ * @param repRange The exercise rep range.
19
+ */
20
+ static getRepRangeValues(repRange: ExerciseRepRange): {
21
+ min: number;
22
+ max: number;
23
+ };
24
+ /**
25
+ * Gets the fatigue score for an exercise.
26
+ *
27
+ * @param exercise The exercise to get the fatigue score for.
28
+ */
29
+ static getFatigueScore(exercise: WorkoutExercise): number;
30
+ /**
31
+ * Calculates the target weight and reps for the FIRST set of an exercise.
32
+ *
33
+ * When `previousSets` are provided (completed or planned-only), autoregulation
34
+ * computes an average surplus across all sets and applies progression. Planned-only
35
+ * sets are forecasted with surplus = 0 so the plan progresses smoothly without
36
+ * falling back to calibration.
37
+ *
38
+ * When no previous sets exist (first mesocycle or new exercise), the calibration-based
39
+ * formula computes initial targets from the exercise's 1RM and rep range.
40
+ */
41
+ static calculateTargetRepsAndWeightForFirstSet(params: {
42
+ exercise: WorkoutExercise;
43
+ calibration: WorkoutExerciseCalibration;
44
+ equipment: WorkoutEquipmentType;
45
+ firstMicrocycleRir: number;
46
+ previousSets: WorkoutSet[];
47
+ }): {
48
+ targetWeight: number;
49
+ targetReps: number;
50
+ };
51
+ }
52
+ //# sourceMappingURL=WorkoutExercise.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkoutExercise.service.d.ts","sourceRoot":"","sources":["../../../../src/services/workout/Exercise/WorkoutExercise.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oDAAoD,CAAC;AAC/F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+CAA+C,CAAC;AACrF,OAAO,EAEL,gBAAgB,EACjB,MAAM,+CAA+C,CAAC;AACvD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,0DAA0D,CAAC;AAC3G,OAAO,KAAK,EAAuB,UAAU,EAAE,MAAM,0CAA0C,CAAC;AAMhG;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,sBAAsB;;IACzC;;;;;;;;OAQG;IACH,MAAM,CAAC,iBAAiB,CAAC,QAAQ,EAAE,gBAAgB,GAAG;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE;IAWlF;;;;OAIG;IACH,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM;IAIzD;;;;;;;;;;OAUG;IACH,MAAM,CAAC,uCAAuC,CAAC,MAAM,EAAE;QACrD,QAAQ,EAAE,eAAe,CAAC;QAC1B,WAAW,EAAE,0BAA0B,CAAC;QACxC,SAAS,EAAE,oBAAoB,CAAC;QAChC,kBAAkB,EAAE,MAAM,CAAC;QAC3B,YAAY,EAAE,UAAU,EAAE,CAAC;KAC5B,GAAG;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE;CA6RjD"}
@@ -1,8 +1,8 @@
1
1
  import { ExerciseProgressionType, ExerciseRepRange } from '../../../documents/workout/WorkoutExercise.js';
2
- import WorkoutEquipmentTypeService from '../EquipmentType/WorkoutEquipmentTypeService.js';
3
- import WorkoutExerciseCalibrationService from '../ExerciseCalibration/WorkoutExerciseCalibrationService.js';
4
- import WorkoutSessionExerciseService from '../SessionExercise/WorkoutSessionExerciseService.js';
5
- import WorkoutSFRService from '../util/SFR/WorkoutSFRService.js';
2
+ import WorkoutEquipmentTypeService from '../EquipmentType/WorkoutEquipmentType.service.js';
3
+ import WorkoutExerciseCalibrationService from '../ExerciseCalibration/WorkoutExerciseCalibration.service.js';
4
+ import WorkoutSessionExerciseService from '../SessionExercise/WorkoutSessionExercise.service.js';
5
+ import WorkoutSFRService from '../util/SFR/WorkoutSFR.service.js';
6
6
  /**
7
7
  * A service for handling operations related to {@link WorkoutExercise}s.
8
8
  */
@@ -59,10 +59,10 @@ export default class WorkoutExerciseService {
59
59
  // forecasts by copying planned values into actuals (surplus = 0) so the
60
60
  // plan progresses smoothly from the planned baseline.
61
61
  const completedSets = previousSets
62
- .map((set) => this.toCompletedSet(set))
62
+ .map((set) => this.#toCompletedSet(set))
63
63
  .filter((set) => set !== null);
64
64
  if (completedSets.length > 0) {
65
- return this.calculateAutoRegulatedTargets({
65
+ return this.#calculateAutoRegulatedTargets({
66
66
  exercise,
67
67
  equipment,
68
68
  previousSets: completedSets,
@@ -70,7 +70,7 @@ export default class WorkoutExerciseService {
70
70
  });
71
71
  }
72
72
  // Calibration-based formula (no previous set available)
73
- return this.calculateCalibrationBasedTargets({
73
+ return this.#calculateCalibrationBasedTargets({
74
74
  exercise,
75
75
  calibration,
76
76
  equipment,
@@ -85,7 +85,7 @@ export default class WorkoutExerciseService {
85
85
  * Previously only the first set's surplus was used, which masked poor performance
86
86
  * on later sets (e.g., first set hits target but second set falls far short).
87
87
  */
88
- static calculateAutoRegulatedTargets(params) {
88
+ static #calculateAutoRegulatedTargets(params) {
89
89
  const { exercise, equipment, previousSets, repRange } = params;
90
90
  // The first set is the reference for rep/weight targets (subsequent sets are
91
91
  // derived from the first via intra-session fatigue drops).
@@ -94,9 +94,9 @@ export default class WorkoutExerciseService {
94
94
  // previousSets are CompletedWorkoutSets (all fields non-null), so this always returns a number.
95
95
  const surplus = WorkoutSessionExerciseService.calculateAverageSurplus(previousSets) ?? 0;
96
96
  if (exercise.preferredProgressionType === ExerciseProgressionType.Rep) {
97
- return this.calculateAutoRegulatedRepTargets(previousFirstSet, surplus, repRange, equipment);
97
+ return this.#calculateAutoRegulatedRepTargets(previousFirstSet, surplus, repRange, equipment);
98
98
  }
99
- return this.calculateAutoRegulatedLoadTargets(previousFirstSet, surplus, repRange, equipment);
99
+ return this.#calculateAutoRegulatedLoadTargets(previousFirstSet, surplus, repRange, equipment);
100
100
  }
101
101
  /**
102
102
  * Auto-regulated rep progression. Attempts to increase reps until hitting rep range max,
@@ -110,7 +110,7 @@ export default class WorkoutExerciseService {
110
110
  * | -3 | Regress: actualReps (use actual as new baseline) |
111
111
  * | < -3 | Severe regress: actualReps + reduce weight (weight is too heavy for rep range) |
112
112
  */
113
- static calculateAutoRegulatedRepTargets(previousSet, surplus, repRange, equipment) {
113
+ static #calculateAutoRegulatedRepTargets(previousSet, surplus, repRange, equipment) {
114
114
  let targetReps;
115
115
  let targetWeight = previousSet.plannedWeight;
116
116
  if (surplus >= 3) {
@@ -140,7 +140,7 @@ export default class WorkoutExerciseService {
140
140
  // Handle rep range ceiling: if target exceeds max, reset and bump weight
141
141
  if (targetReps > repRange.max) {
142
142
  targetReps = Math.floor((repRange.min + repRange.max) / 2);
143
- const nextWeight = this.findNextTwoPercentWeight(targetWeight, equipment);
143
+ const nextWeight = this.#findNextTwoPercentWeight(targetWeight, equipment);
144
144
  if (nextWeight !== null) {
145
145
  targetWeight = nextWeight;
146
146
  }
@@ -162,7 +162,7 @@ export default class WorkoutExerciseService {
162
162
  * | -1 to -2 | Hold weight (no increase) |
163
163
  * | <= -3 | Reduce weight by minimum equipment increment |
164
164
  */
165
- static calculateAutoRegulatedLoadTargets(previousSet, surplus, repRange, equipment) {
165
+ static #calculateAutoRegulatedLoadTargets(previousSet, surplus, repRange, equipment) {
166
166
  const targetReps = repRange.max;
167
167
  let targetWeight = previousSet.plannedWeight;
168
168
  if (surplus >= 2) {
@@ -175,7 +175,7 @@ export default class WorkoutExerciseService {
175
175
  }
176
176
  else if (surplus >= 0) {
177
177
  // Normal: increase by 2%
178
- const nextWeight = this.findNextTwoPercentWeight(targetWeight, equipment);
178
+ const nextWeight = this.#findNextTwoPercentWeight(targetWeight, equipment);
179
179
  if (nextWeight !== null) {
180
180
  targetWeight = nextWeight;
181
181
  }
@@ -201,7 +201,7 @@ export default class WorkoutExerciseService {
201
201
  *
202
202
  * Returns null if the set lacks the minimum planned data needed.
203
203
  */
204
- static toCompletedSet(set) {
204
+ static #toCompletedSet(set) {
205
205
  if (!set) {
206
206
  return null;
207
207
  }
@@ -224,7 +224,7 @@ export default class WorkoutExerciseService {
224
224
  * set exists (first microcycle of the first mesocycle, or brand-new exercise).
225
225
  * All subsequent microcycle progression is handled by autoregulation/forecasting.
226
226
  */
227
- static calculateCalibrationBasedTargets(params) {
227
+ static #calculateCalibrationBasedTargets(params) {
228
228
  const { exercise, calibration, equipment, firstMicrocycleRir, repRange, repRangeMidpoint } = params;
229
229
  // For rep progression, calculate weight based on midpoint + RIR reps
230
230
  // For load progression, use max reps
@@ -243,7 +243,7 @@ export default class WorkoutExerciseService {
243
243
  : repRange.max;
244
244
  return { targetWeight, targetReps };
245
245
  }
246
- static findNextTwoPercentWeight(currentWeight, equipment) {
246
+ static #findNextTwoPercentWeight(currentWeight, equipment) {
247
247
  // Increase weight by at least 2%
248
248
  const twoPercentIncrease = currentWeight * 1.02;
249
249
  // Find the smallest weight >= 2% increase (This is purposefully done from the rounded weight
@@ -252,4 +252,4 @@ export default class WorkoutExerciseService {
252
252
  return nextWeight;
253
253
  }
254
254
  }
255
- //# sourceMappingURL=WorkoutExerciseService.js.map
255
+ //# sourceMappingURL=WorkoutExercise.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkoutExercise.service.js","sourceRoot":"","sources":["../../../../src/services/workout/Exercise/WorkoutExercise.service.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EACjB,MAAM,+CAA+C,CAAC;AAGvD,OAAO,2BAA2B,MAAM,kDAAkD,CAAC;AAC3F,OAAO,iCAAiC,MAAM,8DAA8D,CAAC;AAC7G,OAAO,6BAA6B,MAAM,sDAAsD,CAAC;AACjG,OAAO,iBAAiB,MAAM,mCAAmC,CAAC;AAElE;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,sBAAsB;IACzC;;;;;;;;OAQG;IACH,MAAM,CAAC,iBAAiB,CAAC,QAA0B;QACjD,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,gBAAgB,CAAC,KAAK;gBACzB,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;YAC7B,KAAK,gBAAgB,CAAC,MAAM;gBAC1B,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;YAC9B,KAAK,gBAAgB,CAAC,KAAK;gBACzB,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;QAChC,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,eAAe,CAAC,QAAyB;QAC9C,OAAO,iBAAiB,CAAC,eAAe,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC9E,CAAC;IAED;;;;;;;;;;OAUG;IACH,MAAM,CAAC,uCAAuC,CAAC,MAM9C;QACC,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,kBAAkB,EAAE,YAAY,EAAE,GAAG,MAAM,CAAC;QAEtF,wCAAwC;QACxC,IAAI,CAAC,SAAS,CAAC,aAAa,IAAI,SAAS,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrE,MAAM,IAAI,KAAK,CACb,gDAAgD,SAAS,CAAC,GAAG,KAAK,SAAS,CAAC,KAAK,EAAE,CACpF,CAAC;QACJ,CAAC;QAED,kCAAkC;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC3D,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAEvE,wFAAwF;QACxF,0EAA0E;QAC1E,wEAAwE;QACxE,sDAAsD;QACtD,MAAM,aAAa,GAAG,YAAY;aAC/B,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;aACvC,MAAM,CAAC,CAAC,GAAG,EAA8B,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC;QAE7D,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC,8BAA8B,CAAC;gBACzC,QAAQ;gBACR,SAAS;gBACT,YAAY,EAAE,aAAa;gBAC3B,QAAQ;aACT,CAAC,CAAC;QACL,CAAC;QAED,wDAAwD;QACxD,OAAO,IAAI,CAAC,iCAAiC,CAAC;YAC5C,QAAQ;YACR,WAAW;YACX,SAAS;YACT,kBAAkB;YAClB,QAAQ;YACR,gBAAgB;SACjB,CAAC,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,8BAA8B,CAAC,MAKrC;QACC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;QAE/D,6EAA6E;QAC7E,2DAA2D;QAC3D,MAAM,gBAAgB,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QAEzC,qEAAqE;QACrE,gGAAgG;QAChG,MAAM,OAAO,GAAG,6BAA6B,CAAC,uBAAuB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAEzF,IAAI,QAAQ,CAAC,wBAAwB,KAAK,uBAAuB,CAAC,GAAG,EAAE,CAAC;YACtE,OAAO,IAAI,CAAC,iCAAiC,CAAC,gBAAgB,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QAChG,CAAC;QAED,OAAO,IAAI,CAAC,kCAAkC,CAAC,gBAAgB,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IACjG,CAAC;IAED;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,iCAAiC,CACtC,WAAgC,EAChC,OAAe,EACf,QAAsC,EACtC,SAA+B;QAE/B,IAAI,UAAkB,CAAC;QACvB,IAAI,YAAY,GAAG,WAAW,CAAC,aAAa,CAAC;QAE7C,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;YACjB,UAAU,GAAG,WAAW,CAAC,UAAU,GAAG,CAAC,CAAC;QAC1C,CAAC;aAAM,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;YACxB,UAAU,GAAG,WAAW,CAAC,WAAW,GAAG,CAAC,CAAC;QAC3C,CAAC;aAAM,IAAI,OAAO,IAAI,CAAC,CAAC,EAAE,CAAC;YACzB,UAAU,GAAG,WAAW,CAAC,WAAW,CAAC;QACvC,CAAC;aAAM,IAAI,OAAO,IAAI,CAAC,CAAC,EAAE,CAAC;YACzB,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,uEAAuE;YACvE,oEAAoE;YACpE,iCAAiC;YACjC,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC;YACpC,MAAM,aAAa,GAAG,2BAA2B,CAAC,iBAAiB,CACjE,SAAS,EACT,YAAY,GAAG,IAAI,EACnB,MAAM,CACP,CAAC;YACF,IAAI,aAAa,KAAK,IAAI,EAAE,CAAC;gBAC3B,YAAY,GAAG,aAAa,CAAC;YAC/B,CAAC;QACH,CAAC;QAED,0EAA0E;QAC1E,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;QAEhD,yEAAyE;QACzE,IAAI,UAAU,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC;YAC9B,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3D,MAAM,UAAU,GAAG,IAAI,CAAC,yBAAyB,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;YAC3E,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;gBACxB,YAAY,GAAG,UAAU,CAAC;YAC5B,CAAC;QACH,CAAC;QAED,4BAA4B;QAC5B,MAAM,aAAa,GAAG,2BAA2B,CAAC,iBAAiB,CACjE,SAAS,EACT,YAAY,EACZ,aAAa,CACd,CAAC;QACF,IAAI,aAAa,KAAK,IAAI,EAAE,CAAC;YAC3B,YAAY,GAAG,aAAa,CAAC;QAC/B,CAAC;QAED,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC;IACtC,CAAC;IAED;;;;;;;;;OASG;IACH,MAAM,CAAC,kCAAkC,CACvC,WAAgC,EAChC,OAAe,EACf,QAAsC,EACtC,SAA+B;QAE/B,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC;QAChC,IAAI,YAAY,GAAG,WAAW,CAAC,aAAa,CAAC;QAE7C,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;YACjB,8BAA8B;YAC9B,MAAM,mBAAmB,GAAG,YAAY,GAAG,IAAI,CAAC;YAChD,MAAM,UAAU,GAAG,2BAA2B,CAAC,iBAAiB,CAC9D,SAAS,EACT,mBAAmB,EACnB,IAAI,CACL,CAAC;YACF,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;gBACxB,YAAY,GAAG,UAAU,CAAC;YAC5B,CAAC;QACH,CAAC;aAAM,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;YACxB,yBAAyB;YACzB,MAAM,UAAU,GAAG,IAAI,CAAC,yBAAyB,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;YAC3E,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;gBACxB,YAAY,GAAG,UAAU,CAAC;YAC5B,CAAC;QACH,CAAC;aAAM,IAAI,OAAO,IAAI,CAAC,CAAC,EAAE,CAAC;YACzB,0BAA0B;QAC5B,CAAC;aAAM,CAAC;YACN,wCAAwC;YACxC,MAAM,aAAa,GAAG,2BAA2B,CAAC,iBAAiB,CACjE,SAAS,EACT,YAAY,GAAG,IAAI,EACnB,MAAM,CACP,CAAC;YACF,IAAI,aAAa,KAAK,IAAI,EAAE,CAAC;gBAC3B,YAAY,GAAG,aAAa,CAAC;YAC/B,CAAC;QACH,CAAC;QAED,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC;IACtC,CAAC;IAED;;;;;;;;OAQG;IACH,MAAM,CAAC,eAAe,CAAC,GAAgB;QACrC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,GAAG,GAAG,CAAC;QACvD,IAAI,WAAW,IAAI,IAAI,IAAI,aAAa,IAAI,IAAI,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;YACvE,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO;YACL,GAAG,GAAG;YACN,WAAW;YACX,aAAa;YACb,UAAU;YACV,UAAU,EAAE,GAAG,CAAC,UAAU,IAAI,WAAW;YACzC,YAAY,EAAE,GAAG,CAAC,YAAY,IAAI,aAAa;YAC/C,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,UAAU;SAC3B,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,iCAAiC,CAAC,MAOxC;QACC,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,kBAAkB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,GACxF,MAAM,CAAC;QAET,qEAAqE;QACrE,qCAAqC;QACrC,MAAM,iBAAiB,GACrB,QAAQ,CAAC,wBAAwB,KAAK,uBAAuB,CAAC,GAAG;YAC/D,CAAC,CAAC,gBAAgB,GAAG,kBAAkB;YACvC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;QAEnB,wBAAwB;QACxB,MAAM,SAAS,GAAG,iCAAiC,CAAC,eAAe,CACjE,WAAW,EACX,iBAAiB,CAClB,CAAC;QACF,MAAM,YAAY,GAAG,2BAA2B,CAAC,iBAAiB,CAChE,SAAS,EACT,SAAS,EACT,aAAa,CACd,CAAC;QACF,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CACb,wDAAwD,SAAS,CAAC,GAAG,KAAK,SAAS,CAAC,KAAK,EAAE,CAC5F,CAAC;QACJ,CAAC;QAED,0EAA0E;QAC1E,MAAM,UAAU,GACd,QAAQ,CAAC,wBAAwB,KAAK,uBAAuB,CAAC,GAAG;YAC/D,CAAC,CAAC,gBAAgB;YAClB,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;QAEnB,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC;IACtC,CAAC;IAED,MAAM,CAAC,yBAAyB,CAC9B,aAAqB,EACrB,SAA+B;QAE/B,iCAAiC;QACjC,MAAM,kBAAkB,GAAG,aAAa,GAAG,IAAI,CAAC;QAEhD,6FAA6F;QAC7F,0FAA0F;QAC1F,MAAM,UAAU,GAAG,2BAA2B,CAAC,iBAAiB,CAC9D,SAAS,EACT,kBAAkB,EAClB,IAAI,CACL,CAAC;QACF,OAAO,UAAU,CAAC;IACpB,CAAC;CACF"}
@@ -6,10 +6,10 @@ import {
6
6
  } from '../../../documents/workout/WorkoutExercise.js';
7
7
  import type { WorkoutExerciseCalibration } from '../../../documents/workout/WorkoutExerciseCalibration.js';
8
8
  import type { CompletedWorkoutSet, WorkoutSet } from '../../../documents/workout/WorkoutSet.js';
9
- import WorkoutEquipmentTypeService from '../EquipmentType/WorkoutEquipmentTypeService.js';
10
- import WorkoutExerciseCalibrationService from '../ExerciseCalibration/WorkoutExerciseCalibrationService.js';
11
- import WorkoutSessionExerciseService from '../SessionExercise/WorkoutSessionExerciseService.js';
12
- import WorkoutSFRService from '../util/SFR/WorkoutSFRService.js';
9
+ import WorkoutEquipmentTypeService from '../EquipmentType/WorkoutEquipmentType.service.js';
10
+ import WorkoutExerciseCalibrationService from '../ExerciseCalibration/WorkoutExerciseCalibration.service.js';
11
+ import WorkoutSessionExerciseService from '../SessionExercise/WorkoutSessionExercise.service.js';
12
+ import WorkoutSFRService from '../util/SFR/WorkoutSFR.service.js';
13
13
 
14
14
  /**
15
15
  * A service for handling operations related to {@link WorkoutExercise}s.
@@ -80,11 +80,11 @@ export default class WorkoutExerciseService {
80
80
  // forecasts by copying planned values into actuals (surplus = 0) so the
81
81
  // plan progresses smoothly from the planned baseline.
82
82
  const completedSets = previousSets
83
- .map((set) => this.toCompletedSet(set))
83
+ .map((set) => this.#toCompletedSet(set))
84
84
  .filter((set): set is CompletedWorkoutSet => set !== null);
85
85
 
86
86
  if (completedSets.length > 0) {
87
- return this.calculateAutoRegulatedTargets({
87
+ return this.#calculateAutoRegulatedTargets({
88
88
  exercise,
89
89
  equipment,
90
90
  previousSets: completedSets,
@@ -93,7 +93,7 @@ export default class WorkoutExerciseService {
93
93
  }
94
94
 
95
95
  // Calibration-based formula (no previous set available)
96
- return this.calculateCalibrationBasedTargets({
96
+ return this.#calculateCalibrationBasedTargets({
97
97
  exercise,
98
98
  calibration,
99
99
  equipment,
@@ -109,7 +109,7 @@ export default class WorkoutExerciseService {
109
109
  * Previously only the first set's surplus was used, which masked poor performance
110
110
  * on later sets (e.g., first set hits target but second set falls far short).
111
111
  */
112
- private static calculateAutoRegulatedTargets(params: {
112
+ static #calculateAutoRegulatedTargets(params: {
113
113
  exercise: WorkoutExercise;
114
114
  equipment: WorkoutEquipmentType;
115
115
  previousSets: CompletedWorkoutSet[];
@@ -126,10 +126,10 @@ export default class WorkoutExerciseService {
126
126
  const surplus = WorkoutSessionExerciseService.calculateAverageSurplus(previousSets) ?? 0;
127
127
 
128
128
  if (exercise.preferredProgressionType === ExerciseProgressionType.Rep) {
129
- return this.calculateAutoRegulatedRepTargets(previousFirstSet, surplus, repRange, equipment);
129
+ return this.#calculateAutoRegulatedRepTargets(previousFirstSet, surplus, repRange, equipment);
130
130
  }
131
131
 
132
- return this.calculateAutoRegulatedLoadTargets(previousFirstSet, surplus, repRange, equipment);
132
+ return this.#calculateAutoRegulatedLoadTargets(previousFirstSet, surplus, repRange, equipment);
133
133
  }
134
134
 
135
135
  /**
@@ -144,7 +144,7 @@ export default class WorkoutExerciseService {
144
144
  * | -3 | Regress: actualReps (use actual as new baseline) |
145
145
  * | < -3 | Severe regress: actualReps + reduce weight (weight is too heavy for rep range) |
146
146
  */
147
- private static calculateAutoRegulatedRepTargets(
147
+ static #calculateAutoRegulatedRepTargets(
148
148
  previousSet: CompletedWorkoutSet,
149
149
  surplus: number,
150
150
  repRange: { min: number; max: number },
@@ -182,7 +182,7 @@ export default class WorkoutExerciseService {
182
182
  // Handle rep range ceiling: if target exceeds max, reset and bump weight
183
183
  if (targetReps > repRange.max) {
184
184
  targetReps = Math.floor((repRange.min + repRange.max) / 2);
185
- const nextWeight = this.findNextTwoPercentWeight(targetWeight, equipment);
185
+ const nextWeight = this.#findNextTwoPercentWeight(targetWeight, equipment);
186
186
  if (nextWeight !== null) {
187
187
  targetWeight = nextWeight;
188
188
  }
@@ -211,7 +211,7 @@ export default class WorkoutExerciseService {
211
211
  * | -1 to -2 | Hold weight (no increase) |
212
212
  * | <= -3 | Reduce weight by minimum equipment increment |
213
213
  */
214
- private static calculateAutoRegulatedLoadTargets(
214
+ static #calculateAutoRegulatedLoadTargets(
215
215
  previousSet: CompletedWorkoutSet,
216
216
  surplus: number,
217
217
  repRange: { min: number; max: number },
@@ -233,7 +233,7 @@ export default class WorkoutExerciseService {
233
233
  }
234
234
  } else if (surplus >= 0) {
235
235
  // Normal: increase by 2%
236
- const nextWeight = this.findNextTwoPercentWeight(targetWeight, equipment);
236
+ const nextWeight = this.#findNextTwoPercentWeight(targetWeight, equipment);
237
237
  if (nextWeight !== null) {
238
238
  targetWeight = nextWeight;
239
239
  }
@@ -263,7 +263,7 @@ export default class WorkoutExerciseService {
263
263
  *
264
264
  * Returns null if the set lacks the minimum planned data needed.
265
265
  */
266
- private static toCompletedSet(set?: WorkoutSet): CompletedWorkoutSet | null {
266
+ static #toCompletedSet(set?: WorkoutSet): CompletedWorkoutSet | null {
267
267
  if (!set) {
268
268
  return null;
269
269
  }
@@ -287,7 +287,7 @@ export default class WorkoutExerciseService {
287
287
  * set exists (first microcycle of the first mesocycle, or brand-new exercise).
288
288
  * All subsequent microcycle progression is handled by autoregulation/forecasting.
289
289
  */
290
- private static calculateCalibrationBasedTargets(params: {
290
+ static #calculateCalibrationBasedTargets(params: {
291
291
  exercise: WorkoutExercise;
292
292
  calibration: WorkoutExerciseCalibration;
293
293
  equipment: WorkoutEquipmentType;
@@ -330,7 +330,7 @@ export default class WorkoutExerciseService {
330
330
  return { targetWeight, targetReps };
331
331
  }
332
332
 
333
- private static findNextTwoPercentWeight(
333
+ static #findNextTwoPercentWeight(
334
334
  currentWeight: number,
335
335
  equipment: WorkoutEquipmentType
336
336
  ): number | null {
@@ -5,6 +5,7 @@ import type { WorkoutExerciseCalibration } from '../../../documents/workout/Work
5
5
  * A service for handling operations related to {@link WorkoutExerciseCalibration}s.
6
6
  */
7
7
  export default class WorkoutExerciseCalibrationService {
8
+ #private;
8
9
  /**
9
10
  * Calculates the 1 Rep Max using the NASM formula.
10
11
  *
@@ -73,16 +74,5 @@ export default class WorkoutExerciseCalibrationService {
73
74
  * @param dateRecorded The date to use as dateRecorded for new calibrations.
74
75
  */
75
76
  static generateAutoCalibrations(exerciseCTOs: WorkoutExerciseCTO[], userId: UUID, dateRecorded: Date): WorkoutExerciseCalibration[];
76
- /**
77
- * Calculates the target percentage of 1RM for a given target rep count.
78
- *
79
- * Uses the formula: targetPercentage = 85 - ((targetReps - 5) * 2.2)
80
- *
81
- * This ensures training stays within the 85%-30% 1RM range (5 reps to 30 reps).
82
- * Higher rep counts produce lower percentages of 1RM.
83
- *
84
- * @param targetReps The target number of reps.
85
- */
86
- private static getTargetPercentage;
87
77
  }
88
- //# sourceMappingURL=WorkoutExerciseCalibrationService.d.ts.map
78
+ //# sourceMappingURL=WorkoutExerciseCalibration.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkoutExerciseCalibration.service.d.ts","sourceRoot":"","sources":["../../../../src/services/workout/ExerciseCalibration/WorkoutExerciseCalibration.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6CAA6C,CAAC;AACtF,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,0DAA0D,CAAC;AAG3G;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,iCAAiC;;IAIpD;;;;;;OAMG;IACH,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,0BAA0B,GAAG,MAAM;IAI9D;;;;;OAKG;IACH,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM;IAItD;;;;;;;OAOG;IACH,MAAM,CAAC,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;;;;;;;IAS7D;;;;;;;;OAQG;IACH,MAAM,CAAC,eAAe,CAAC,WAAW,EAAE,0BAA0B,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM;IAK3F;;;;;;;;;;;;;OAaG;IACH,MAAM,CAAC,sBAAsB,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM;IAK/E;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,wBAAwB,CAC7B,YAAY,EAAE,kBAAkB,EAAE,EAClC,MAAM,EAAE,IAAI,EACZ,YAAY,EAAE,IAAI,GACjB,0BAA0B,EAAE;CAyChC"}