| 81 | } |
| 82 | |
| 83 | function parseTopLevelValue(value: string): unknown { |
| 84 | if (value.startsWith('[') && value.endsWith(']')) { |
| 85 | return value.slice(1, -1).split(',').map(s => s.trim().replaceAll(/^['"]|['"]$/g, '')); |
| 86 | } |
| 87 | if (value === 'true') return true; |
| 88 | if (value === 'false') return false; |
| 89 | const num = Number.parseFloat(value); |
| 90 | if (!Number.isNaN(num) && String(num) === value) return num; |
| 91 | return value.replaceAll(/^['"]|['"]$/g, ''); |
| 92 | } |
| 93 | |
| 94 | function parseFrontmatter(raw: string): { frontmatter: ParsedFrontmatter; body: string } | null { |
| 95 | const match = raw.match(/^---\s*\n([\s\S]*?)\n---\s*\n([\s\S]*)$/); |