powerhouse-rp-toolkit
Version:
Renaissance Periodization Training Toolkit for PowerHouseATX
539 lines (538 loc) • 17.6 kB
JavaScript
!(function (e, t, n, a, s, o, r, i) {
var u =
"undefined" != typeof globalThis
? globalThis
: "undefined" != typeof self
? self
: "undefined" != typeof window
? window
: "undefined" != typeof global
? global
: {},
l = "function" == typeof u[a] && u[a],
d = l.i || {},
c = l.cache || {},
m =
"undefined" != typeof module &&
"function" == typeof module.require &&
module.require.bind(module);
function f(t, n) {
if (!c[t]) {
if (!e[t]) {
if (s[t]) return s[t];
var o = "function" == typeof u[a] && u[a];
if (!n && o) return o(t, !0);
if (l) return l(t, !0);
if (m && "string" == typeof t) return m(t);
var r = Error("Cannot find module '" + t + "'");
throw ((r.code = "MODULE_NOT_FOUND"), r);
}
(d.resolve = function (n) {
var a = e[t][1][n];
return null != a ? a : n;
}),
(d.cache = {});
var i = (c[t] = new f.Module(t));
e[t][0].call(i.exports, d, i, i.exports, u);
}
return c[t].exports;
function d(e) {
var t = d.resolve(e);
return !1 === t ? {} : f(t);
}
}
(f.isParcelRequire = !0),
(f.Module = function (e) {
(this.id = e), (this.bundle = f), (this.require = m), (this.exports = {});
}),
(f.modules = e),
(f.cache = c),
(f.parent = l),
(f.distDir = void 0),
(f.publicUrl = void 0),
(f.devServer = void 0),
(f.i = d),
(f.register = function (t, n) {
e[t] = [
function (e, t) {
t.exports = n;
},
{},
];
}),
Object.defineProperty(f, "root", {
get: function () {
return u[a];
},
}),
(u[a] = f);
for (var v = 0; v < t.length; v++) f(t[v]);
if (n) {
var g = f(n);
"object" == typeof exports && "undefined" != typeof module
? (module.exports = g)
: "function" == typeof define &&
define.amd &&
define(function () {
return g;
});
}
})(
{
boGW6: [
function (e, t, n, a) {
var s = e("@parcel/transformer-js/src/esmodule-helpers.js");
s.defineInteropFlag(n),
s.export(n, "scoreStimulus", () => u),
s.export(n, "mevStimulusEstimator", () => u),
s.export(n, "setProgressionAlgorithm", () => c),
s.export(n, "rpSetProgression", () => c),
s.export(n, "analyzeVolumeStatus", () => m),
s.export(n, "calculateRecoveryVolume", () => f),
s.export(n, "validateVolumeInput", () => v),
s.export(n, "getVolumeProgression", () => g),
s.export(n, "analyzeDeloadNeed", () => h),
s.export(n, "autoSetIncrement", () => l),
s.export(n, "processWeeklyVolumeProgression", () => d);
var o = e("../core/trainingState.js"),
r = s.interopDefault(o),
i = e("./fatigue.js");
function u({ mmc: e, pump: t, disruption: n }) {
let a,
s,
o,
r = (e, t, n) => Math.max(t, Math.min(n, e)),
i = r(e, 0, 3),
u = r(t, 0, 3),
l = r(n, 0, 3),
d = i + u + l;
return (
d <= 3
? ((a = `Stimulus too low (${d}/9) \u{2192} Add 2 sets next session`),
(s = "add_sets"),
(o = 2))
: d <= 6
? ((a = `Stimulus adequate (${d}/9) \u{2192} Keep sets the same`),
(s = "maintain"),
(o = 0))
: ((a = `Stimulus excessive (${d}/9) \u{2192} Remove 1-2 sets next session`),
(s = "reduce_sets"),
(o = -1)),
{
score: d,
advice: a,
action: s,
setChange: o,
breakdown: { mmc: i, pump: u, disruption: l },
}
);
}
function l(e, t, n) {
let { MEV: a, MRV: s } = n.volumeLandmarks[e],
o = n.currentWeekSets[e] || a,
r = o <= a,
i = o >= s,
u = t.stimulus <= 3,
l = t.soreness <= 1 && t.perf >= 0;
return i || t.recoverySession
? {
add: !1,
delta: 0,
reason: i
? "At MRV - holding volume"
: "Recovery session needed",
}
: r || (u && l)
? {
add: !0,
delta: Math.min(1 + +!!r, 2),
reason: r
? "Starting from MEV - aggressive progression"
: "Low stimulus with good recovery",
}
: { add: !1, delta: 0, reason: "Maintaining current volume" };
}
function d(e, t) {
let n = {},
a = !1,
s = 0;
return (
Object.keys(e).forEach((a) => {
let o = e[a];
(0, i.isHighFatigue)(a, o, t) &&
(t.hitMRV(a),
s++,
console.log(`hitMRV: true (fatigue) - ${a}`),
(o.recoverySession = !0));
let r = l(a, o, t);
r.add && t.addSets(a, r.delta),
t.getWeeklySets(a) >= t.volumeLandmarks[a].MRV &&
(t.hitMRV(a), s++),
(n[a] = {
previousSets: t.lastWeekSets[a] || t.volumeLandmarks[a].MEV,
currentSets: t.getWeeklySets(a),
increment: r.delta,
reason: r.reason,
status: t.getVolumeStatus(a),
});
}),
t.shouldDeload() && (t.startDeload(), (a = !0)),
{
progressionLog: n,
deloadTriggered: a,
mrvHits: s,
weekComplete: !0,
recommendation: a
? "Deload phase initiated"
: "Continue progression",
}
);
}
function c(e, t) {
let n = (e, t, n) => Math.max(t, Math.min(n, e)),
a = n(e, 0, 3),
s = n(t, 0, 3);
return [
[
{
advice: "Add 1 set next session",
action: "add_sets",
setChange: 1,
},
{
advice: "Add 2 sets next session",
action: "add_sets",
setChange: 2,
},
{
advice: "Add 2-3 sets next session",
action: "add_sets",
setChange: 2,
},
{
advice: "Add 2-3 sets next session",
action: "add_sets",
setChange: 3,
},
],
[
{
advice: "Hold sets at current level",
action: "maintain",
setChange: 0,
},
{
advice: "Add 1 set next session",
action: "add_sets",
setChange: 1,
},
{
advice: "Add 2 sets next session",
action: "add_sets",
setChange: 2,
},
{
advice: "Add 2-3 sets next session",
action: "add_sets",
setChange: 2,
},
],
[
{
advice: "Do recovery session",
action: "recovery",
setChange: -99,
},
{
advice: "Hold sets at current level",
action: "maintain",
setChange: 0,
},
{
advice: "Hold sets at current level",
action: "maintain",
setChange: 0,
},
{
advice: "Add 1 set next session",
action: "add_sets",
setChange: 1,
},
],
[
{
advice: "Do recovery session",
action: "recovery",
setChange: -99,
},
{
advice: "Do recovery session",
action: "recovery",
setChange: -99,
},
{
advice: "Do recovery session",
action: "recovery",
setChange: -99,
},
{
advice: "Hold sets at current level",
action: "maintain",
setChange: 0,
},
],
][a][s];
}
function m(e, t = null) {
let n = null !== t ? t : r.default.currentWeekSets[e],
a = r.default.volumeLandmarks[e];
if (!a) throw Error(`Unknown muscle group: ${e}`);
let s = r.default.getVolumeStatus(e, n),
o = (n / a.MRV) * 100,
i = "",
u = "normal";
switch (s) {
case "under-minimum":
(i = `Below MV (${a.MV}). Increase volume significantly.`),
(u = "high");
break;
case "maintenance":
(i = `In maintenance zone (${a.MV}-${a.MEV}). Consider increasing for growth.`),
(u = "low");
break;
case "optimal":
(i = `In optimal zone (${a.MEV}-${a.MAV}). Continue progressive overload.`),
(u = "normal");
break;
case "high":
(i = `High volume zone (${a.MAV}-${a.MRV}). Monitor recovery closely.`),
(u = "medium");
break;
case "maximum":
(i = `At/above MRV (${a.MRV}). Deload recommended.`),
(u = "high");
}
return {
muscle: e,
currentSets: n,
landmarks: a,
status: s,
percentage: Math.round(o),
recommendation: i,
urgency: u,
color: r.default.getVolumeColor(e, n),
};
}
function f(e, t = !1) {
let n = r.default.volumeLandmarks[e],
a = r.default.getRecoveryVolume(e, t);
return {
muscle: e,
recommendedSets: a,
reasoning: t ? "illness adjustment" : "standard recovery",
landmarks: n,
percentage: Math.round((a / n.MEV) * 100),
};
}
function v(e, t) {
let n = r.default.volumeLandmarks[e],
a = t >= 0 && t <= 1.2 * n.MRV,
s = "";
return (
t < 0
? (s = "Sets cannot be negative")
: t > n.MRV
? (s = `Above MRV (${n.MRV}). Consider deload.`)
: t < n.MV &&
(s = `Below MV (${n.MV}). May not be sufficient for adaptation.`),
{ isValid: a, warning: s, proposedSets: t, landmarks: n }
);
}
function g(e, t) {
let n = r.default.currentWeekSets[e],
a = m(e),
s = u(t.stimulus),
o = c(t.soreness, t.performance),
i = o.setChange,
l = o.advice;
if (
("maximum" === a.status &&
i > 0 &&
((i = 0), (l = "At MRV limit. Hold sets or consider deload.")),
"under-minimum" === a.status &&
i <= 0 &&
((i = 2),
(l = "Below minimum volume. Add sets regardless of fatigue.")),
"recovery" === o.action)
) {
let a = f(e, t.hasIllness);
(i = a.recommendedSets - n),
(l = `Recovery session: ${a.recommendedSets} sets (${a.reasoning})`);
}
let d = Math.max(0, n + i);
return {
muscle: e,
currentSets: n,
projectedSets: d,
setChange: i,
advice: l,
stimulusScore: s.score,
volumeStatus: a.status,
targetRIR: r.default.getTargetRIR(),
deloadRecommended: r.default.shouldDeload(),
};
}
function h() {
let e = Object.keys(r.default.volumeLandmarks),
t = e.filter((e) => "maximum" === r.default.getVolumeStatus(e)),
n = r.default.shouldDeload(),
a = [];
return (
r.default.consecutiveMRVWeeks >= 2 &&
a.push("Two consecutive weeks at MRV"),
r.default.totalMusclesNeedingRecovery >= Math.ceil(e.length / 2) &&
a.push("Most muscles need recovery sessions"),
r.default.weekNo >= r.default.mesoLen &&
a.push("End of mesocycle reached"),
t.length >= Math.ceil(e.length / 3) &&
a.push(`${t.length} muscle groups at/above MRV`),
{
shouldDeload: n,
reasons: a,
mrvBreaches: t,
consecutiveMRVWeeks: r.default.consecutiveMRVWeeks,
currentWeek: r.default.weekNo,
mesoLength: r.default.mesoLen,
musclesNeedingRecovery: r.default.totalMusclesNeedingRecovery,
}
);
}
},
{
"../core/trainingState.js": "e7afj",
"./fatigue.js": "3GKzs",
"@parcel/transformer-js/src/esmodule-helpers.js": "k3151",
},
],
"3GKzs": [
function (e, t, n, a) {
var s = e("@parcel/transformer-js/src/esmodule-helpers.js");
s.defineInteropFlag(n),
s.export(n, "analyzeFrequency", () => i),
s.export(n, "calculateOptimalFrequency", () => u),
s.export(n, "isHighFatigue", () => l);
var o = e("../core/trainingState.js"),
r = s.interopDefault(o);
function i(e, t, n = null) {
let a = Math.max(0, e),
s = Math.max(1, t),
o = "",
u = "",
l = "normal",
d = 0,
c = a / s;
if (
(c < 0.7
? ((o = "You heal early → Add one session per week"),
(u = "increase_frequency"),
(d = 1),
(l = "medium"))
: c > 1.3
? ((o = "Recovery lags → Insert an extra rest day"),
(u = "decrease_frequency"),
(d = -1),
(l = "high"))
: ((o = "Frequency is optimal"),
(u = "maintain"),
(d = 0),
(l = "normal")),
n)
) {
let e = r.default.getVolumeStatus(n);
"maximum" === e &&
"increase_frequency" === u &&
((o = "At MRV - maintain frequency despite early recovery"),
(u = "maintain"),
(d = 0)),
"under-minimum" === e &&
"decrease_frequency" === u &&
((o =
"Below MV - consider recovery methods instead of reducing frequency"),
(u = "improve_recovery"),
(d = 0));
}
return {
sorenessRecoveryDays: a,
currentSessionGap: s,
recoveryRatio: Math.round(100 * c) / 100,
recommendation: o,
action: u,
frequencyAdjustment: d,
urgency: l,
muscle: n,
};
}
function u(e, t = {}) {
let {
availableDays: n = 6,
currentVolume: a = null,
recoveryCapacity: s = "normal",
trainingAge: o = "intermediate",
} = t,
i = a || r.default.currentWeekSets[e],
l = r.default.volumeLandmarks[e],
d = {
beginner: { min: 2, max: 3 },
intermediate: { min: 2, max: 4 },
advanced: { min: 3, max: 5 },
}[o],
c = 2,
m = Math.round(
(c =
i >= l.MAV
? Math.min(4, Math.ceil(i / 6))
: i >= l.MEV
? Math.min(3, Math.ceil(i / 8))
: Math.max(2, Math.ceil(i / 10))) *
{ low: 0.8, normal: 1, high: 1.2 }[s],
),
f = Math.max(d.min, Math.min(d.max, m, n)),
v = Math.ceil(i / f);
return {
muscle: e,
recommendedFrequency: f,
setsPerSession: v,
totalVolume: i,
reasoning: [
`${i} weekly sets`,
`${s} recovery capacity`,
`${o} training age`,
`${n} available days`,
],
alternatives: {
conservative: Math.max(2, f - 1),
aggressive: Math.min(n, f + 1),
},
};
}
function l(e, t, n) {
let a = t.soreness || 0,
s = t.jointAche || 0,
o = t.perfChange || 0,
r = (t.pump || 0) + (t.disruption || 0),
i = !!t.lastLoad && n.repStrengthDrop(e, t.lastLoad);
return r / (a + s + 2 * (o < 0) || 1) <= 1 || i;
}
},
{
"../core/trainingState.js": "e7afj",
"@parcel/transformer-js/src/esmodule-helpers.js": "k3151",
},
],
},
["boGW6"],
"boGW6",
"parcelRequire66c8",
{},
);
//# sourceMappingURL=volume.43331bd9.js.map