YAML: Listen aus Maps

`- titel: X` zerfiel in Zeichenketten wie "titel: X". Jede Kanalpunkt-
Belohnung in der Konfiguration war damit ohne jede Meldung unwirksam, auch
das Beispiel in config.example.yaml.

Ein Listeneintrag der Form `schluessel: wert` beginnt jetzt eine Map; die
folgenden, tiefer eingerueckten Zeilen gehoeren dazu. `- http://x` bleibt
Text, weil nach dem Doppelpunkt kein Leerzeichen steht.

layout.yaml, config.example.yaml und die Hub-Konfiguration werden
nachweislich gleich gelesen wie vorher.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
ZeasyAlexandClaude Opus 5.5 committed 2026-09-23 22:58:35 +02:00
1 parent 0a3d462854
commit b1cf0f8fab
2 files changed
+50 -3

No files matched your search

+16 -3
View File
@@ -1,8 +1,8 @@
// Minimaler YAML-Leser fuer unsere eigenen Konfigurationsdateien.
//
// Deckt genau das ab, was config/*.yaml benutzt: verschachtelte Maps ueber
// Einrueckung, Skalare, Inline-Maps `{a: 1, b: 2}`, Listen aus Skalaren und
// Blockskalare (`>` / `|`). Bewusst kein vollstaendiges YAML - das Projekt
// Einrueckung, Skalare, Inline-Maps `{a: 1, b: 2}`, Listen aus Skalaren oder
// Maps (`- titel: X`) und Blockskalare (`>` / `|`). Bewusst kein vollstaendiges YAML - das Projekt
// kommt ohne npm-Abhaengigkeiten aus, und der Sprachumfang, den wir selbst
// schreiben, ist ueberschaubar.
@@ -73,7 +73,20 @@ export function parseYaml(text: string): YamlMap {
if (body.startsWith('- ')) {
const key = frame.listKey;
const list = key ? frame.target[key] : undefined;
if (Array.isArray(list)) list.push(scalar(body.slice(2)));
const item = body.slice(2);
// `- titel: X` beginnt eine Map als Listeneintrag. Die Zeile wird mit
// der Einrueckung ihres Inhalts neu gelesen, die folgenden, tiefer
// eingerueckten Zeilen landen in derselben Map. Ohne das zerfiel
// `rewards.belohnungen` in einzelne Zeichenketten, und jede Belohnung
// war ohne Fehlermeldung unwirksam.
if (Array.isArray(list) && /^[^\s'"{[#-][^:]*:(\s|$)/.test(item)) {
const map: YamlMap = {};
list.push(map);
stack.push({ indent, target: map });
lines[i] = ' '.repeat(indent + 2) + item;
continue;
}
if (Array.isArray(list)) list.push(scalar(item));
i++;
continue;
}