scripts/new/createArticlePost.ts
import { existsSync, mkdirSync, readFileSync } from 'node:fs'
import fs from 'node:fs/promises'
import path from 'node:path'
import { fileURLToPath } from 'node:url'
import type { Ora } from 'ora'
import { slugify } from '../../src/lib/slugify/slugify.js'
const __dirname = path.dirname(fileURLToPath(import.meta.url))
const templatePath = path.join(__dirname, 'new-article.md')
export async function createArticlePost(
dest: string,
spinner: Ora,
title: string,
newDate?: string
) {
let file = ''
const date = newDate
? new Date(newDate).toISOString()
: new Date().toISOString()
spinner.text = `Adding '${title}'.`
try {
const titleSlug = slugify(title)
const dateShort = date.slice(0, 10)
const folderName = `${dateShort}-${titleSlug}`
const destination = `${dest}/${folderName}`
file = `${destination}/index.md`
const template = readFileSync(templatePath).toString()
const newContents = template
.split('TITLE')
.join(title)
.split('SLUG')
.join(titleSlug)
.split('DATE')
.join(date)
// Create the destination folder if it doesn't exist
if (!existsSync(destination)) {
mkdirSync(destination, { recursive: true })
}
// create post file
await fs.appendFile(file, newContents)
spinner.succeed(`New post '${title}' created.`)
} catch (error: unknown) {
spinner.fail((error as Error).message)
}
return file
}