Restore missing driver, car and session normalizers

This commit is contained in:
larssand
2026-03-26 19:43:31 +01:00
parent f5d13cf2f8
commit df9c5321b7

View File

@@ -1930,6 +1930,70 @@ function normalizeObsOverlaySettings(raw = {}) {
};
}
function normalizeDriver(driver = {}) {
return {
id: String(driver?.id || uid("driver")),
name: String(driver?.name || "").trim(),
classId: String(driver?.classId || "").trim(),
transponder: String(driver?.transponder || "").trim(),
brand: String(driver?.brand || "").trim(),
};
}
function normalizeCar(car = {}) {
return {
id: String(car?.id || uid("car")),
name: String(car?.name || "").trim(),
transponder: String(car?.transponder || "").trim(),
brand: String(car?.brand || "").trim(),
};
}
function normalizeSession(session = {}) {
const type = SESSION_TYPES.includes(String(session?.type || "").toLowerCase())
? String(session.type).toLowerCase()
: "practice";
const status = ["ready", "running", "stopped", "finished"].includes(String(session?.status || "").toLowerCase())
? String(session.status).toLowerCase()
: "ready";
const seedMethod = ["best_sum", "average", "consecutive"].includes(String(session?.seedMethod || "").toLowerCase())
? String(session.seedMethod).toLowerCase()
: "best_sum";
const assignments = Array.isArray(session?.assignments)
? session.assignments
.map((assignment) => ({
id: String(assignment?.id || uid("as")),
driverId: String(assignment?.driverId || "").trim(),
carId: String(assignment?.carId || "").trim(),
}))
.filter((assignment) => assignment.driverId || assignment.carId)
: [];
return {
...session,
id: String(session?.id || uid("session")),
eventId: String(session?.eventId || "").trim(),
name: String(session?.name || "").trim(),
type,
durationMin: Math.max(1, Number(session?.durationMin || 1) || 1),
followUpSec: Math.max(0, Number(session?.followUpSec || 0) || 0),
startMode: normalizeStartMode(session?.startMode || "mass"),
seedBestLapCount: Math.max(0, Number(session?.seedBestLapCount || 0) || 0),
seedMethod,
staggerGapSec: Math.max(0, Number(session?.staggerGapSec || 0) || 0),
maxCars: session?.maxCars ? Math.max(1, Number(session.maxCars) || 1) : null,
mode: session?.mode === "track" ? "track" : "race",
status,
startedAt: Number.isFinite(Number(session?.startedAt)) ? Number(session.startedAt) : null,
endedAt: Number.isFinite(Number(session?.endedAt)) ? Number(session.endedAt) : null,
finishedByTimer: session?.finishedByTimer === true,
assignments,
driverIds: Array.isArray(session?.driverIds) ? session.driverIds.map(String).filter(Boolean) : [],
manualGridIds: Array.isArray(session?.manualGridIds) ? session.manualGridIds.map(String).filter(Boolean) : [],
gridCustomized: session?.gridCustomized === true,
generated: session?.generated === true,
};
}
function parseOverlayBooleanParam(name, fallback) {
const raw = urlParams.get(name);
if (raw == null) {