const fs = require('fs'); const path = require('path'); const blogDir = path.join(process.cwd(), 'data', 'blog'); function fixFile(filePath) { const content = fs.readFileSync(filePath, 'utf8'); const lines = content.split('\n'); if (lines[0].trim() !== '---') { return; // Not a frontmatter file or already fixed/different format } let newLines = []; let inFrontmatter = false; let frontmatterLines = []; let contentLines = []; // Separate frontmatter and content if (lines[0].trim() === '---') { inFrontmatter = true; let i = 1; // Skip empty line after first --- if (lines[1].trim() === '') { i = 2; } for (; i < lines.length; i++) { if (lines[i].trim() === '---') { inFrontmatter = false; contentLines = lines.slice(i + 1); break; } frontmatterLines.push(lines[i]); } } // Process frontmatter lines to fix multiline strings let fixedFrontmatter = []; for (let i = 0; i < frontmatterLines.length; i++) { let line = frontmatterLines[i]; // Check for multiline indicator >- if (line.includes('>-')) { const [key, ...rest] = line.split(':'); if (rest.join(':').trim() === '>-') { // It's a multiline start let value = ''; let j = i + 1; while (j < frontmatterLines.length) { const nextLine = frontmatterLines[j]; // If next line is a new key (contains : and doesn't start with space), stop if (nextLine.includes(':') && !nextLine.startsWith(' ')) { break; } value += (value ? ' ' : '') + nextLine.trim(); j++; } fixedFrontmatter.push(`${key}: '${value.replace(/'/g, "''")}'`); i = j - 1; // Skip processed lines } else { fixedFrontmatter.push(line); } } else { fixedFrontmatter.push(line); } } const newContent = `---\n${fixedFrontmatter.join('\n')}\n---\n${contentLines.join('\n')}`; fs.writeFileSync(filePath, newContent); console.log(`Fixed ${filePath}`); } function processDir(dir) { const files = fs.readdirSync(dir); for (const file of files) { const filePath = path.join(dir, file); const stat = fs.statSync(filePath); if (stat.isDirectory()) { processDir(filePath); } else if (file.endsWith('.mdx')) { fixFile(filePath); } } } processDir(blogDir);