/** Parsed YAML scalar from minimal frontmatter parser. */ export type FrontmatterScalar = string | number | boolean | string[]; export function parseScalar(value: string): FrontmatterScalar { const trimmed = value.trim(); if (trimmed === "true") return true; if (trimmed === "false") return false; if (/^-?\d+(\.\d+)?$/.test(trimmed)) return Number(trimmed); if (trimmed.startsWith("[") && trimmed.endsWith("]")) { return trimmed .slice(1, -1) .split(",") .map((item) => item.trim().replace(/^['"]|['"]$/g, "")) .filter(Boolean); } return trimmed.replace(/^['"]|['"]$/g, ""); } export function toStringArray( value: FrontmatterScalar | FrontmatterScalar[] | undefined, ): string[] { if (Array.isArray(value)) { return value.flatMap((item) => (typeof item === "string" ? [item] : [])); } if (typeof value === "string") return value .split(",") .map((item) => item.trim()) .filter(Boolean); return []; }