import { readFileSync, writeFileSync } from "node:fs"; import { readdir } from "node:fs/promises"; import { join, extname, relative } from "node:path"; const DOCS_DIR = join(import.meta.dirname, "..", "src", "content", "docs"); /** * Recursively collect all .mdx files. */ async function collectMdxFiles(dir) { const entries = await readdir(dir, { withFileTypes: true }); const files = []; for (const entry of entries) { if (entry.name.startsWith("_")) continue; const fullPath = join(dir, entry.name); if (entry.isDirectory()) { const subFiles = await collectMdxFiles(fullPath); files.push(...subFiles); } else if (extname(entry.name) === ".mdx") { files.push(fullPath); } } return files; } /** * Extract tags from frontmatter. */ function extractTags(content) { const match = content.match(/^---\r?\n([\s\S]*?)\r?\n---/); if (!match) return []; const fm = match[1]; // Match YAML-style tags array: tags:\n - tag1\n - tag2 const tagSection = fm.match(/^tags:\s*\n((?:\s+-\s+.+\n?)*)/m); if (!tagSection) return []; const tagLines = tagSection[1].match(/^\s+-\s+(.+)$/gm); if (!tagLines) return []; return tagLines.map((line) => line.replace(/^\s+-\s+/, "").trim()); } /** * Infer `about` from tags. * Uses the first tag that is not "一般質問". */ function inferAbout(tags) { for (const tag of tags) { if (tag !== "一般質問") return tag; } return null; } async function main() { const files = await collectMdxFiles(DOCS_DIR); let updated = 0; let skipped = 0; for (const file of files) { const content = readFileSync(file, "utf-8"); // Only process files that use QuestionSummary if (!content.includes(" { console.error("Error:", err); process.exit(1); });