Optional ReadonlyasThe activity date this profile was resolved as-of (ISO 8601, UTC);
undefined for a history-less profile from of.
Functional Threshold Power (watts) in force on the date, if recorded.
Heart-rate zone ranges (bpm axis), if an HR basis is recorded.
Pace zone ranges (speed axis, m/s; Z1 slowest), if a threshold is recorded.
Power zone ranges (watt axis, Coggan), derived from FTP if recorded.
Body weight (kg) in force on the date, if recorded — drives W/kg.
StaticasResolve the athlete's stored profile to the values in force on the activity's date — the values used for FTP-relative power, W/kg, and zones.
StaticofA profile from explicit settings with no effective-dated history — the
"I just have an FTP / weight" case (demos, fixtures, a fallback prop, or a
settings form with nothing recorded yet). For history-aware resolution use
asOf. Power zones derive from ftpWatts; HR / pace zones are absent
(they need a basis, which a bare settings object doesn't carry).
An athlete's settings resolved to a single activity date — the value object an import('../activity/index.js').Activity is read against via
activity.usingProfile(bob). Wraps the as-of resolution (profileAsOf) and exposes the zone ranges (the per-channel ZoneDefs); the per-activity data (time-in-zone) is the profiled activity'sby…Zone().Immutable; carries only athlete data, never an activity's evidence — so one
Profileis reused across every activity on its date.