Files
discord-decomp/modules/search/StringMatchUtils.tsx
T
2026-11-01 12:12:55 +02:00

159 lines
3.9 KiB
TypeScript

// Metro module 14711 (f14712).
const calculateJaroWinklerDistance = function calculateJaroWinklerDistance(a0, a1) {
let r48, r82, r110, length2, length4, length6, length7;
const r1 = Math.floor(Math.max(a0.length, a1.length) / 2) - 1;
const r30 = [];
const r12 = 0 < a0.length;
let r2 = 0;
let r32 = 0;
let r10 = 0;
if (r12) {
do {
let r35 = Math.max(0, r2 - r1);
const r36 = Math;
const length = a1.length;
const r6 = r2 + r1;
const r39 = r36.min(length, r6);
const r40 = r2;
const r5 = r32;
let r4 = r5;
if (r35 <= r39) {
do {
const r41 = a0[r40];
const r42 = a1[r35];
const r43 = r35;
if (r41 === r42 && !r30[r43]) {
r30[r43] = true;
r4 = r5 + 1;
break;
}
r35 = r43 + 1;
r48 = Math.min(a1.length, r6);
r4 = r5;
} while (r35 <= r48);
}
r2 = r40 + 1;
length2 = a0.length;
r32 = r4;
r10 = r32;
} while (r2 < length2);
}
if (!(0 < r10)) {
return 0;
}
const r59 = Math.floor(Math.max(a0.length, a1.length) / 2) - 1;
const r60 = [];
const r62 = 0 < a0.length;
let r64 = "";
let r65 = 0;
let r66 = "";
if (r62) {
do {
let r23 = Math.max(0, r65 - r59);
const r24 = Math;
const length3 = a1.length;
const r72 = r65 + r59;
const r73 = r24.min(length3, r72);
const r74 = r64;
const r75 = r65;
let r76 = r74;
if (r23 <= r73) {
do {
const r26 = a0[r75];
const r25 = a1[r23];
const r77 = r23;
if (r26 === r25 && !r60[r77]) {
r76 = r74 + a0[r75];
r60[r77] = true;
break;
}
r23 = r77 + 1;
r82 = Math.min(a1.length, r72);
r76 = r74;
} while (r23 <= r82);
}
r65 = r75 + 1;
length4 = a0.length;
r64 = r76;
r66 = r64;
} while (r65 < length4);
}
const r84 = [];
const r86 = 0 < a1.length;
let r87 = "";
let r88 = 0;
let r89 = "";
if (r86) {
do {
let r93 = Math.max(0, r88 - r59);
const r94 = Math;
const length5 = a0.length;
const r97 = r88 + r59;
const r98 = r94.min(length5, r97);
const r99 = r87;
const r100 = r88;
let r101 = r99;
if (r93 <= r98) {
do {
const r102 = a1[r100];
const r103 = a0[r93];
const r104 = r93;
if (r102 === r103 && !r84[r104]) {
r101 = r99 + a1[r100];
r84[r104] = true;
break;
}
r93 = r104 + 1;
r110 = Math.min(a0.length, r97);
r101 = r99;
} while (r93 <= r110);
}
r88 = r100 + 1;
length6 = a1.length;
r87 = r101;
r89 = r87;
} while (r88 < length6);
}
const r113 = 0 < r66.length;
let r114 = 0;
let r115 = 0;
let r116 = 0;
if (r113) {
do {
const r117 = r66[r114];
const r118 = r89[r114];
const r119 = r114;
const r120 = r115;
const r121 = r117 !== r118 ? r120 + 1 : r120;
r114 = r119 + 1;
length7 = r66.length;
r115 = r121;
r116 = r115;
} while (r114 < length7);
}
const r136 = (r10 / a0.length + r10 / a1.length + (r10 - Math.floor(r116 / 2)) / r10) / 3;
let r139 = 0;
if (r136 < 0.7) {
return r136;
}
while (true) {
const r140 = a0[r139];
const r141 = a1[r139];
const r142 = r139;
let r143 = r142;
if (r140 === r141) {
const r144 = r142 + 1;
r139 = r144;
if (r139 < 4) {
continue;
}
r143 = r144 + 1;
}
return r136 + 0.1 * r143 * (1 - r136);
}
};
export function calculateJaroWinklerSimilarity(a0, a1, a2) {
const caseSensitive = (a2 == null ? {} : a2).caseSensitive;
return caseSensitive !== void 0 && caseSensitive ? calculateJaroWinklerDistance(a0, a1) : calculateJaroWinklerDistance(a0.toLowerCase(), a1.toLowerCase());
}