import fs from 'fs'; import path from 'path'; const rawData = fs.readFileSync('./tmp_posts.json', 'utf8'); const data = JSON.parse(rawData); function parseNode(node) { if (node.type === 'text') { let text = node.text; if (node.format === 1) text = `**${text}**`; if (node.format === 2) text = `*${text}*`; if (node.format === 8) text = `\`${text}\``; return text; } if (node.type === 'paragraph') { return node.children.map(parseNode).join('') + '\n\n'; } if (node.type === 'heading') { const level = node.tag ? node.tag.replace('h', '') : '2'; const hashes = '#'.repeat(parseInt(level)); return `${hashes} ${node.children.map(parseNode).join('')}\n\n`; } if (node.type === 'list') { const isOrdered = node.listType === 'number'; return node.children.map((li, i) => { const prefix = isOrdered ? `${i + 1}.` : '-'; return `${prefix} ${li.children.map(parseNode).join('')}`; }).join('\n') + '\n\n'; } if (node.type === 'quote') { return `> ${node.children.map(parseNode).join('')}\n\n`; } if (node.type === 'link') { return `[${node.children.map(parseNode).join('')}](${node.fields.url})`; } if (node.children) { return node.children.map(parseNode).join(''); } return ''; } const outDir = './apps/web/src/content/posts'; fs.mkdirSync(outDir, { recursive: true }); for (const post of data.docs) { const frontmatter = `--- title: "${post.title.replace(/"/g, '\\"')}" date: "${post.date}" description: "${post.description ? post.description.replace(/"/g, '\\"') : ''}" tags: [${(post.tags || []).map(t => `"${t.tag}"`).join(', ')}] --- `; let markdown = frontmatter; if (post.content && post.content.root && post.content.root.children) { markdown += post.content.root.children.map(parseNode).join(''); } const filename = `${post.slug}.mdx`; fs.writeFileSync(path.join(outDir, filename), markdown.trim() + '\n'); console.log(`Wrote ${filename}`); }