fix(sonar): split mixed-type sort value in perf history (javascript:S3800)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
mARTin-B78 2026-10-06 13:08:54 +02:00
parent bf4a71a61a
commit 39469ced2b

View File

@ -709,6 +709,8 @@ function perfHistoryAvatarHtml(entry) {
}
const PERF_HISTORY_TEXT_KEYS = ['backend', 'language', 'gender', 'voice', 'device'];
function perfHistorySortValue(entry, key) {
switch (key) {
case 'backend': return String(entry.backend || '').toLowerCase();
@ -716,21 +718,22 @@ function perfHistorySortValue(entry, key) {
case 'gender': return String(perfHistoryGenderLabel(perfHistoryVoiceMeta(entry).gender) || '').toLowerCase();
case 'voice': return String(entry.voice || '').toLowerCase();
case 'device': return String(perfHistoryDeviceLabel(entry) || '').toLowerCase();
case 'avgLatencyMs': return Number(entry.avgLatencyMs);
case 'minLatencyMs': return Number(entry.minLatencyMs);
case 'avgRtf': return Number(entry.avgRtf);
case 'ts':
default: return Number(entry.ts);
default: return '';
}
}
function perfHistoryNumericValue(entry, key) {
return Number(['avgLatencyMs', 'minLatencyMs', 'avgRtf'].includes(key) ? entry[key] : entry.ts);
}
function perfHistoryCompare(a, b) {
const av = perfHistorySortValue(a, PERF_HISTORY_SORT.key);
const bv = perfHistorySortValue(b, PERF_HISTORY_SORT.key);
const key = PERF_HISTORY_SORT.key;
let result = 0;
if (typeof av === 'string' || typeof bv === 'string') {
result = String(av).localeCompare(String(bv), undefined, { numeric: true, sensitivity: 'base' });
if (PERF_HISTORY_TEXT_KEYS.includes(key)) {
result = perfHistorySortValue(a, key).localeCompare(perfHistorySortValue(b, key), undefined, { numeric: true, sensitivity: 'base' });
} else {
const av = perfHistoryNumericValue(a, key);
const bv = perfHistoryNumericValue(b, key);
const an = Number.isFinite(av) ? av : -Infinity;
const bn = Number.isFinite(bv) ? bv : -Infinity;
result = an === bn ? 0 : an - bn;