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:
parent
bf4a71a61a
commit
39469ced2b
@ -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;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user