import { defineConfig } from 'vite' import react from '@vitejs/plugin-react' import fs from "fs"; import path from "path"; import chokidar from "chokidar"; // https://vite.dev/config/ function generateIndex(postsDir, outputFile) { const files = fs.readdirSync(postsDir) .filter(f => f.endsWith(".md")); fs.writeFileSync(outputFile, JSON.stringify(files, null, 2)); console.log(`Complete: index.json updated (${files.length} posts)`); } function generateIndexPlugin() { const postsDir = path.resolve("public/posts"); const outputFile = path.resolve("public/posts/index.json"); return { name: "generate-index-json", buildStart() { generateIndex(postsDir, outputFile); }, configureServer(server) { const watcher = chokidar.watch(postsDir, { ignoreInitial: true }); const update = () => { generateIndex(postsDir, outputFile); server.ws.send({ type: "full-reload", path: "/posts/index.json" }); }; watcher.on("add", update); watcher.on("unlink", update); watcher.on("change", update); server.httpServer.on("close", () => watcher.close()); } }; } export default defineConfig({ plugins: [react(),generateIndexPlugin()], })