import { normalizeLowercaseStringOrEmpty } from "../../shared/string-coerce.js" ;
import type { SessionEntry } from "./types.js" ;
export function normalizeStoreSessionKey(sessionKey: string): string {
return normalizeLowercaseStringOrEmpty(sessionKey);
}
export function resolveSessionStoreEntry(params: {
store: Record<string, SessionEntry>;
sessionKey: string;
}): {
normalizedKey: string;
existing: SessionEntry | undefined;
legacyKeys: string[];
} {
const trimmedKey = params.sessionKey.trim();
const normalizedKey = normalizeStoreSessionKey(trimmedKey);
const legacyKeySet = new Set<string>();
if (
trimmedKey !== normalizedKey &&
Object.prototype.hasOwnProperty.call(params.store, trimmedKey)
) {
legacyKeySet.add(trimmedKey);
}
let existing =
params.store[normalizedKey] ?? (legacyKeySet.size > 0 ? params.store[trimmedKey] : undefined);
let existingUpdatedAt = existing?.updatedAt ?? 0 ;
for (const [candidateKey, candidateEntry] of Object.entries(params.store)) {
if (candidateKey === normalizedKey) {
continue ;
}
if (normalizeStoreSessionKey(candidateKey) !== normalizedKey) {
continue ;
}
legacyKeySet.add(candidateKey);
const candidateUpdatedAt = candidateEntry?.updatedAt ?? 0 ;
if (!existing || candidateUpdatedAt > existingUpdatedAt) {
existing = candidateEntry;
existingUpdatedAt = candidateUpdatedAt;
}
}
return {
normalizedKey,
existing,
legacyKeys: [...legacyKeySet],
};
}
Messung V0.5 in Prozent C=100 H=90 G=95
¤ Dauer der Verarbeitung: 0.9 Sekunden
(vorverarbeitet am 2026-06-10)
¤
*© Formatika GbR, Deutschland