60 lines
2.3 KiB
JavaScript
60 lines
2.3 KiB
JavaScript
import fs from 'fs'
|
|
import path from 'path'
|
|
import matter from 'gray-matter'
|
|
|
|
const CONTENT_DIR = path.join(process.cwd(), 'content')
|
|
const KNIEPUNKT_DIR = path.join(CONTENT_DIR, 'kniepunkt')
|
|
const POSTS_DIR = path.join(CONTENT_DIR, 'posts')
|
|
|
|
function getFiles(dir) {
|
|
return fs.readdirSync(dir).map(f => path.join(dir, f)).filter(f => f.endsWith('.md'))
|
|
}
|
|
|
|
const allPosts = getFiles(POSTS_DIR)
|
|
const allKniepunkte = getFiles(KNIEPUNKT_DIR)
|
|
|
|
// 1. Clean up Kniepunkt Residues in posts/
|
|
allPosts.forEach(post => {
|
|
const filename = path.basename(post)
|
|
if (filename.match(/^0[1-9][0-9]/)) {
|
|
const issueMatch = filename.match(/^0([1-9][0-9])/)
|
|
if (issueMatch) {
|
|
const issueNum = issueMatch[1]
|
|
const matchingKniepunkt = allKniepunkte.find(k => path.basename(k).includes(`0${issueNum}`) || path.basename(k).includes(issueNum))
|
|
if (matchingKniepunkt) {
|
|
console.log(`🗑️ Deleting residue in posts/: ${filename}`)
|
|
fs.unlinkSync(post)
|
|
} else {
|
|
// move to kniepunkt
|
|
const newPath = path.join(KNIEPUNKT_DIR, filename)
|
|
fs.renameSync(post, newPath)
|
|
console.log(`➡️ Moved residue to kniepunkt/: ${filename}`)
|
|
allKniepunkte.push(newPath)
|
|
}
|
|
}
|
|
}
|
|
})
|
|
|
|
// 2. Merge intro posts in kniepunkt/
|
|
const introPosts = allKniepunkte.filter(k => path.basename(k).match(/^202[0-9]-/))
|
|
introPosts.forEach(intro => {
|
|
const introData = matter(fs.readFileSync(intro, 'utf8'))
|
|
const titleMatch = introData.data.title.match(/kniepunkt\s*0?(\d+)/i) || path.basename(intro).match(/kniepunkt-0?(\d+)/i)
|
|
|
|
if (titleMatch) {
|
|
const issueNum = titleMatch[1]
|
|
const article = allKniepunkte.find(k => k !== intro && (path.basename(k).includes(`0${issueNum}`) || path.basename(k).includes(`-${issueNum}-`)) && !path.basename(k).match(/^202[0-9]-/))
|
|
|
|
if (article) {
|
|
const articleData = matter(fs.readFileSync(article, 'utf8'))
|
|
const mergedContent = introData.content.trim() + '\n\n---\n\n' + articleData.content.trim()
|
|
articleData.data.date = introData.data.date
|
|
fs.writeFileSync(article, matter.stringify(mergedContent, articleData.data))
|
|
fs.unlinkSync(intro)
|
|
console.log(`✅ Merged Intro ${path.basename(intro)} -> ${path.basename(article)}`)
|
|
} else {
|
|
console.log(`⚠️ Could not find article for intro: ${path.basename(intro)} (Issue ${issueNum})`)
|
|
}
|
|
}
|
|
})
|