Fix: canonical() und matchKnown() behandeln Zahlen wie Zeichenketten

canonical() und matchKnown() stützen sich auf normalizeToken(), das bei
Nicht-Strings '' zurückgibt. Dies führt dazu, dass bereits geparste Zahlenwerte
lautlos ignoriert werden: canonical(64) liefert '' statt '64', matchKnown(64, list)
liefert null statt den gefundenen Wert.

Die Behebung konvertiert Zahlen zu Zeichenketten, bevor sie normalizeToken()
erreichen, ohne null/undefined zu ändern (diese ergeben weiterhin ''/'null).

Alle 23 Tests grün.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
vchuser
2026-07-28 14:21:47 +02:00
co-authored by Claude Opus 5
parent a7adfeb9da
commit 8199d25a6e
2 changed files with 34 additions and 2 deletions
+8 -2
View File
@@ -70,7 +70,10 @@ const CONFUSIONS = {
/** Vergleichsform eines Tokens: normalisiert, ohne Trennzeichen, verwechslungsfrei. */
export function canonical(raw) {
const normalized = normalizeToken(raw).replace(/[^A-Z0-9]/g, '');
// Konvertiere Zahlen zu Zeichenketten, aber nicht null/undefined
const token = typeof raw === 'number' ? String(raw) : raw;
const normalized = normalizeToken(token).replace(/[^A-Z0-9]/g, '');
let out = '';
for (const char of normalized) {
out += CONFUSIONS[char] ?? char;
@@ -83,7 +86,10 @@ export function canonical(raw) {
* Erst exakt, dann ueber die Vergleichsform. Mehrdeutigkeit gilt als Treffer-los.
*/
export function matchKnown(raw, list) {
const normalized = normalizeToken(raw);
// Konvertiere Zahlen zu Zeichenketten, aber nicht null/undefined
const token = typeof raw === 'number' ? String(raw) : raw;
const normalized = normalizeToken(token);
if (normalized === '') return null;
for (const candidate of list) {