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:
1 parent
0a3d462854
commit
b1cf0f8fab
2 files changed
+50
-3
No files matched your search
@@ -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;
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user